码头工人撰写孤儿容器警告
Posted
技术标签:
【中文标题】码头工人撰写孤儿容器警告【英文标题】:docker compose orphan containers warning 【发布时间】:2018-11-29 13:41:32 【问题描述】:当您有 2 个独立的项目并且您希望它们同时工作或至少在没有 --remove-orphans
标志的情况下构建运行 docker-compose up -d
时,如果已经为另一个项目构建了图像,那么如何使用孤立图像。
码头工人撰写文件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)。如果您在撰写文件中删除或重命名了此服务,则可以使用
--remove-orphans
标志运行此命令来清理它。
我推测这是因为 project1 的容器名称应该更具体,我需要添加一些前缀,就像我为 project2 所做的那样,但 project1 已被许多其他开发人员使用,我不想更改它.
有没有办法关闭孤儿检查?
第二件事:只是一条警告消息,但由于某种原因,它出现后 compose 失败并出现错误:
错误:启动项目时遇到错误。
为了让它工作,我需要运行docker-compose up -d --remove-orphans
【问题讨论】:
我对系统中的两个不同用户也有这个问题 【参考方案1】:Compose 在内部使用项目名称(默认为项目目录的基本名称,但可以明确指定)将项目相互隔离。项目名称用于为所有项目的容器和其他资源创建唯一标识符。例如,如果您的项目名称是 myapp
,并且它包含两个服务 db
和 web
,那么 Compose 会分别启动名为 myapp_db_1
和 myapp_web_1
的容器。
您收到"Found orphan containers"
警告,因为docker-compose
检测到某些容器属于另一个同名项目。
为防止不同项目相互干扰(并抑制警告),您可以使用-p
command line option 或COMPOSE_PROJECT_NAME
environment variable 设置自定义项目名称。环境变量也可以通过environment file(默认在当前工作目录中.env
)来设置。
【讨论】:
有时候我真的很讨厌 Docker 文档忽略了这些重要的细节。我花了太多时间试图弄清楚为什么docker-compose
将两个完全独立的 YML 文件视为同一个项目的一部分,甚至自己得出结论,它必须与项目名称相关联。 +1
我的两个独立项目位于C:\somedir1\docker
和C:\somedir2\docker
目录中。但我认为 docker-compose 只是将封闭文件夹(docker
)作为项目名称,而不是整个路径。因此,为 docker-compose 设置项目名称是强制性的。【参考方案2】:
docker-compose
将其所在目录的名称作为默认项目名称。
您可以使用-p
或--project-name
设置不同的项目名称。
https://docs.docker.com/compose/reference/#use--p-to-specify-a-project-name
我遇到了类似的问题,因为我的项目都有docker/docker-compose.yml
结构。
【讨论】:
【参考方案3】:为了构建其他答案,我使用我的 docker compose 项目创建了一个 .env
文件。我有许多项目都使用docker
目录,但它们是不同的项目。
使用docker-compose -p
容易出错,所以在与docker-compose.yml
相同的目录下创建.env
文件:
-rw-rw-r-- 1 auser auser 1692 Aug 22 20:34 docker-compose.yml
-rw-rw-r-- 1 auser auser 31 Aug 22 20:44 .env
减轻记住-p
的必要开销。
在.env
文件中,我现在可以设置COMPOSE_PROJECT_NAME
变量:
COMPOSE_PROJECT_NAME=myproject
运行中:
docker-compose up -d
COMPOSE_PROJECT_NAME
被替换而不使用-p
。
参考: https://docs.docker.com/compose/env-file/
【讨论】:
【参考方案4】:如果孤立容器是预期的并且不打算删除,您可以将 COMPOSE_IGNORE_ORPHANS
变量设置为 true。
简洁但马上工作的来源是here。
一种选择是将其作为一行放入.env
文件中docker-compose.yml
旁边,如下所示:
COMPOSE_IGNORE_ORPHANS=True
另一个选项是传递或将其设置为环境变量。
嘘:
COMPOSE_IGNORE_ORPHANS=True docker-compose up -d
或
export COMPOSE_IGNORE_ORPHANS=True
docker-compose up -d
命令:
SET COMPOSE_IGNORE_ORPHANS=True&& docker-compose up -d
powershell:
$env:COMPOSE_IGNORE_ORPHANS = 'True'; & docker-compose up -d
【讨论】:
【参考方案5】:docker-compose up --remove-orphan
您可以运行此命令来清理孤立容器。如警告中所述
【讨论】:
问的问题是没有--remove-orphans
怎么办以上是关于码头工人撰写孤儿容器警告的主要内容,如果未能解决你的问题,请参考以下文章