当您有 2 个独立项目并且您希望它们同时工作或至少构建运行时如何使用孤儿图像 docker-compose up -d
没有 --remove-orphans
已构建图像时的标志另一个项目。
码头工人撰写文件1:
version: '2'
services:
applications:
image: tianon/true
volumes:
- ../../:/var/www/vhosts/project1
nginx:
build: ./images/nginx
image: project1/nginx:latest
ports:
- "80:80"
volumes_from:
- applications
networks:
appnet:
aliases:
- project1.app
- admin.project1.app
php:
image: project1/php:latest
ports:
- "7778:7778"
build:
context: ./images/php
dockerfile: Dockerfile
volumes_from:
- applications
networks:
- appnet
mysql:
image: project1/mysql:latest
build: ./images/mysql
environment:
MYSQL_ROOT_PASSWORD: secret
volumes:
- mysqldata:/var/lib/mysql
networks:
- appnet
ports:
- "33066:3306"
workspace:
image: project1/workspace:latest
build:
context: ./images/workspace
volumes_from:
- applications
working_dir: /var/www/vhosts/project1
networks:
- appnet
networks:
appnet:
driver: "bridge"
volumes:
mysqldata:
driver: "local"
第二个 docker compose 文件:
version: '2'
services:
project2_applications:
image: tianon/true
volumes:
- ../../:/var/www/vhosts/project2
project2_nginx:
build: ./images/nginx
image: project2/nginx:latest
ports:
- "8080:80"
volumes_from:
- project2_applications
networks:
project2_appnet:
aliases:
- project2.app
- admin.project2.app
project2_php:
image: project2/php:latest
ports:
- "7777:7777"
build:
context: ./images/php
dockerfile: Dockerfile
volumes_from:
- project2_applications
networks:
- project2_appnet
project2_mysql:
image: project2/mysql:latest
build: ./images/mysql
environment:
MYSQL_ROOT_PASSWORD: secret
volumes:
- project2_mysqldata:/var/lib/mysql
networks:
- project2_appnet
ports:
- "33067:3306"
project2_workspace:
image: project2/workspace:latest
build:
context: ./images/workspace
volumes_from:
- project2_applications
working_dir: /var/www/vhosts/videosite
networks:
- project2_appnet
networks:
project2_appnet:
driver: "bridge"
volumes:
project2_mysqldata:
driver: "local"
现在,当我已经构建了 project1 并尝试为第二个项目运行 docker-compose up -d
时,我看到了警告:
警告:为该项目找到孤立容器(docker_workspace_1、docker_nginx_1、docker_php_1、docker_mysql_1、docker_memcached_1)。如果您在 compose 文件中删除或重命名了此服务,则可以使用
--remove-orphans
标志运行此命令来清理它。
我推测这是因为 project1 的容器名称应该更具体,我需要添加一些前缀,就像我为 project2 所做的那样,但 project1 已被许多其他开发人员使用,我不想更改它。
有没有办法关闭孤儿检查?
第二件事:只是一条警告消息,但由于某种原因,在它出现后 compose 失败并出现错误:
错误:启动项目时遇到错误。
为了让它工作,我需要运行 docker-compose up -d --remove-orphans
原文由 Bogdan Dubyk 发布,翻译遵循 CC BY-SA 4.0 许可协议
Compose 在内部使用 _项目名称_(默认为项目目录的基本名称)来隔离项目。项目名称用于为所有项目的容器和其他资源创建唯一标识符。 For example, if your project name is
myapp
and it includes two servicesdb
andweb
, then Compose starts containers namedmyapp_db_1
andmyapp_web_1
分别。您会收到
"Found orphan containers"
警告,因为docker-compose
检测到一些容器属于另一个 同名 项目。为了防止不同的项目相互干扰(并抑制警告),您可以使用以下任何选项设置自定义项目名称:
-p
命令行选项。COMPOSE_PROJECT_NAME
环境变量。此环境变量也可以通过 环境文件 设置(默认情况下在当前工作目录中为.env
)。name
元素。注意:如果您通过-f
选项将多个文件传递给docker-compose
,则将使用最后一个文件中的值。