如何在monorepo中使用多个Dockerfile?

4

我正在尝试在Windows上设置Docker开发环境。我的代码目录结构如下:

project/
  node-app/
  react-app-1/
  react-app-2/
  shared/

node-appreact-app-1react-app-2都依赖于shared中的代码。所以,我考虑在每个应用程序中都有一个Dockerfile,类似于这样:

FROM node:10.0

WORKDIR /app
COPY ../ .

WORKDIR /app/node-app
RUN npm install

然而,那并不行 - Docker 给我一个错误,说它是一个“禁止的路径在构建上下文之外:../”。
如何解决这个问题?在解决这个问题之后,我将设置一些 Docker Compose(再次为本地开发),因此我的理想解决方案将考虑到这一点。

https://docs.docker.com/engine/reference/builder/ 解释了上下文如何工作。如果您从 project/ 目录中运行 docker build .,则可以获得正确的上下文,并且您必须使用 -f/--file 指定要选择哪个 Dockerfile。您还可以在组合文件的 build 部分中设置显式上下文和文件:https://docs.docker.com/compose/compose-file/#build - jonrsharpe
1
可能是如何在Docker的构建上下文之外包含文件?的重复问题。 - jonrsharpe
1个回答

5

COPY ../ .是无效的,因为..在构建上下文之外(默认情况下,这是从发出docker build命令的目录)。

要解决此问题,您可以从顶级目录($PWD=project/)构建应用程序,从而使该目录中的所有文件/目录都可用于构建上下文,并指定要用于构建的Dockerfile

cd project/ && docker build -t <your_image_name> -f node-app/Dockerfile .

或:
docker build -t <your_image_name> -f /path/to/project/node-app/Dockerfile /path/to/project/

当然,由于您现在是从顶级目录构建的,所以请将COPY ../ .替换为COPY . .

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接