在构建上下文之外访问文件

时间:2019-01-04 12:39:14

标签: docker

我知道您不能脱离Docker的构建上下文,我正在寻找有关如何在两个文件夹之间(构建上下文之外)共享文件的替代方法。

我的文件夹结构是

project
  - server
     Dockerfile
  - client
     Dockerfile

我的client文件夹需要访问server文件夹中的文件以进行一些代码生成,其中根据服务器的合同来构建客户端。

client 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 .目录中运行client

RUN yarn build步骤中,脚本正在../server/src/schema/schema.graphql中寻找一个找不到的文件,因为该文件位于client目录之外,因此也在Docker的构建上下文之外。

我该如何解决此问题,或解决该问题的其他建议?

1 个答案:

答案 0 :(得分:0)

最简单的方法是将源树的根用作Docker上下文目录,将其指向一个或另一个Dockerfile,并明确说明您是否在使用2^nclient树。

server
cd $HOME/project
docker build \
  -t project-client:$(git rev-parse --short HEAD) \
  -f client/Dockerfile \
  .

在GraphQL的特定情况下,取决于您的应用程序和库堆栈,有可能完全避免需要该模式,而只进行未经检查的客户端调用;或在启动时进行内省查询以动态获取模式;或维护模式文件的两个单独副本。我从事的某些项目使用GraphQL接口,但是服务器和客户端位于实际的单独存储库中,别无选择,只能存储架构的单独副本,但是如果您对更改小心,实际上这不是问题。