Bog*_*byk 47 containers project docker docker-compose
如何与孤儿图像时,你有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"
Run Code Online (Sandbox Code Playgroud)
第二个 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"
Run Code Online (Sandbox Code Playgroud)
现在,当我已经构建了 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
Eug*_*ash 45
Compose 在内部使用项目名称(默认为项目目录的基本名称,但可以明确指定)以将项目彼此隔离。项目名称用于为项目的所有容器和其他资源创建唯一标识符。例如,如果您的项目名称是myapp并且它包含两个服务dband web,那么 Compose 会分别启动名为myapp_db_1and 的容器myapp_web_1。
您收到"Found orphan containers"警告是因为docker-compose检测到一些属于另一个同名项目的容器。
为了防止不同的项目相互干扰(并抑制警告),您可以使用-p命令行选项或COMPOSE_PROJECT_NAME环境变量设置自定义项目名称。也可以通过环境文件(.env默认在当前工作目录中)设置环境变量。
bob*_*bob 38
docker-compose 将其所在目录的名称作为默认项目名称。
您可以使用-p或设置不同的项目名称--project-name。
https://docs.docker.com/compose/reference/#use--p-to-specify-a-project-name
我有一个类似的问题,因为我的项目都有docker/docker-compose.yml结构。
小智 20
docker-compose up --remove-orphans
Run Code Online (Sandbox Code Playgroud)
您可以运行此命令来清理孤立容器。正如警告中所指出的
mou*_*ick 16
如果孤立容器是预期的且不打算删除,则可以将COMPOSE_IGNORE_ORPHANS变量设置为 true。
简洁但马上工作源就在这里。
一种选择是将其作为一行放入.env文件中docker-compose.yml,如下所示:
COMPOSE_IGNORE_ORPHANS=True
Run Code Online (Sandbox Code Playgroud)
另一个选项是将其传递或设置为环境变量。
嘘:
COMPOSE_IGNORE_ORPHANS=True docker-compose up -d
Run Code Online (Sandbox Code Playgroud)
或者
export COMPOSE_IGNORE_ORPHANS=True
docker-compose up -d
Run Code Online (Sandbox Code Playgroud)
命令:
SET COMPOSE_IGNORE_ORPHANS=True&& docker-compose up -d
Run Code Online (Sandbox Code Playgroud)
电源外壳:
$env:COMPOSE_IGNORE_ORPHANS = 'True'; & docker-compose up -d
Run Code Online (Sandbox Code Playgroud)
use*_*201 10
为了建立其他答案,我.env用我的 docker compose 项目创建了一个文件。我有许多项目都使用该docker目录,但都是不同的项目。
使用docker-compose -p有点容易出错,因此.env在与以下内容相同的目录中创建文件docker-compose.yml:
-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
Run Code Online (Sandbox Code Playgroud)
减轻了记忆的必要开销-p。
在.env文件中,我现在可以设置COMPOSE_PROJECT_NAME变量:
COMPOSE_PROJECT_NAME=myproject
Run Code Online (Sandbox Code Playgroud)
运行时:
COMPOSE_PROJECT_NAME=myproject
Run Code Online (Sandbox Code Playgroud)
的COMPOSE_PROJECT_NAME被取代的,而无需使用-p。
参考:https : //docs.docker.com/compose/env-file/
长话短说
您还可以向每个撰写文件添加唯一的名称:myproject 。
我的旅程
如果这可以帮助其他人寻找上述问题的帮助(这是为了支持这里已经很好的评论):
我在同一目录中有几个配置文件
redis.yml
mariadb.yml
...
Run Code Online (Sandbox Code Playgroud)
当我运行时,我不断收到有关孤立容器的相同错误
docker-compose -f <one of my configs>.yml up
Run Code Online (Sandbox Code Playgroud)
到目前为止,您可以简单地将每个 yml 文件放入一个单独的项目中。这只需使用前面已经提到过的参数“-p my_project_name”之类的命令即可完成。 但名称必须全部小写!
这让我更接近了一些,但我也一直忘记,要使用 docker-compose 关闭 docker 容器,我还需要包含该参数。
例如启动容器:
docker-compose -p myproject-d redis.yml up -d
Run Code Online (Sandbox Code Playgroud)
并销毁容器
docker-compose -p myproject-d redis.yml down
Run Code Online (Sandbox Code Playgroud)
今天我发现我可以简单地将name: bit 添加到 yml 配置中。这是一个 redis 的例子:
version: '3.9'
name: redis
services:
redis_0:
...
Run Code Online (Sandbox Code Playgroud)
现在我可以简单地使用以下命令启动容器,而不必再次担心项目名称:
docker-compose -f redis.yml <up/down>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
52835 次 |
| 最近记录: |