由于我的项目结构,我面临着大型 docker 构建上下文的问题。在我的根目录中,我有用于公共(public)代码的 lib 文件夹和微服务文件夹。现在我想为 miscroservice1 构建只包含 lib 文件夹并忽略其他微服务。
我在根文件夹中运行 docker build 命令,因为在微服务文件夹中运行命令会在构建上下文之外给出错误 Forbidden path
rootFolder
-- lib
-- microservice1/Dockerfile
-- microservice2/Dockerfile
-- microservice3/Dockerfile
我有两种解决方案,但暂时没有尝试
我正在尝试上述两种解决方案。任何人都可以提出任何最佳做法吗?
最佳答案
您可以创建.dockerignore
在您的根目录中并添加
microservice1/
microservice2/
microservice3/
给它,就像 .gitignore
在跟踪文件期间,docker 将在构建期间忽略这些文件夹/文件。更新
您可以包括
docker-compose.yml
根目录下的文件,查看docker-compose对于所有选项,例如设置 environment
,运行特定命令等,您可以在构建过程中使用。version: "3"
services:
microservice1:
build:
context: .
dockerfile: ./microservice1/Dockerfile
volumes:
- "./path/to/share:/path/to/mount/on/container"
ports:
- "<host>:<container>"
links:
- rootservice # defines a dns record in /etc/hosts to point to rootservice
microservice2:
build:
context: .
dockerfile: ./microservice2/Dockerfile
volumes:
- "./path/to/share:/path/to/mount/on/container"
ports:
- "<host>:<container>"
links:
- rootservice # defines a dns record in /etc/hosts to point to rootservice
- microservice1
rootservice:
build:
context: .
dockerfile: ./Dockerfile
volumes:
- "./path/to/share:/path/to/mount/on/container"
ports:
- "<host>:<container>"
depends_on:
- microservice1
- microservice2
ports:
- "<host1>:<container1>"
- "<host2>:<container2>"
这将是您的 microservices
的构建配方,您现在可以运行 docker-compose build
构建所有图像。
关于docker - 如何忽略要在 docker build 上下文中发送的文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57740571/