代码之家  ›  专栏  ›  技术社区  ›  janhartmann

在生成上下文外部访问文件

  •  0
  • janhartmann  · 技术社区  · 6 年前

    我知道你不能跳出Docker的构建上下文,我正在寻找如何在两个文件夹之间共享一个文件的替代方案(在构建上下文之外)。

    我的文件夹结构是

    project
      - server
         Dockerfile
      - client
         Dockerfile
    

    我的 client 文件夹需要访问 server 用于生成某些代码的文件夹,其中客户端是根据服务器的约定生成的。

    这个 客户机 Dockerfile如下所示:

    FROM node:10-alpine AS build
    WORKDIR /app
    
    COPY . /app
    RUN yarn install
    RUN yarn build
    
    FROM node:10-alpine
    WORKDIR /app
    
    RUN yarn install --production
    COPY --from=build /app ./
    
    EXPOSE 5000
    
    CMD [ "yarn", "serve" ]
    

    我跑 docker build -t my-name . 里面 客户机 目录。

    期间 RUN yarn build 步骤,脚本正在 ../server/src/schema/schema.graphql 无法找到,因为文件位于 客户机 目录,因此不在Docker的构建上下文中。

    我怎样才能避开这个问题,或者其他解决这个问题的建议?

    1 回复  |  直到 6 年前
        1
  •  0
  •   David Maze    6 年前

    最简单的方法是使用源树的根作为docker上下文目录,将其指向一个或另一个dockerfile,并明确说明是否使用 client server 树。

    cd $HOME/project
    docker build \
      -t project-client:$(git rev-parse --short HEAD) \
      -f client/Dockerfile \
      .
    
    FROM node:10-alpine AS build
    WORKDIR /app
    COPY client/ ./
    ET cetera
    

    在graphql的特定情况下,根据应用程序和库堆栈的不同,可能完全不需要模式,只需进行未经检查的客户端调用;或者在启动时进行内省查询以动态获取模式;或者维护架构文件。我处理的一些项目使用graphql接口,但是服务器和客户机位于实际的单独存储库中,除了存储模式的单独副本之外别无选择,但是如果您对更改很小心,这在实践中并不是一个问题。