gpt4 book ai didi

docker - 为什么在使用 '-p'标志运行时docker-compose启动不同的镜像

转载 作者:行者123 更新时间:2023-12-02 19:16:43 24 4
gpt4 key购买 nike

我们在Jenkins服务器上运行了一个设置,该设置在Docker容器中运行,而我已从离开的同事那里接管了该容器。
我看到一些我不理解的行为,无法从文档中了解正在发生的事情。
我的文件夹结构如下所示:

└── Master
├── docker-compose.yml
└── jenkins-master
└── Dockerfile
我的docker-compose.yaml文件如下所示(这只是相关部分的片段):
version: '3'

services:
master:
build: ./jenkins-master
我已经在 jenkins-master/Dockerfile中更新了基本Jenkins图像的版本,然后使用 docker-compose build进行了重建。
成功完成并生成名为 master_master的图像
如果运行 docker images,我会看到此新图像以及上一张图像:
REPOSITORY        TAG      IMAGE ID    CREATED          SIZE
master_master latest <id1> 16 hours ago 704MB
jenkins_master latest <id2> 10 months ago 707MB
据我了解,名称 master_master是基础文件夹名称(即 Master)和 master文件中 docker-compose.yaml的服务名称的结果。
我不知道现有的图像如何以 jenkins_master命名。文件夹名称必须是 Jenkins而不是 Master,还是有另一种方式可以导致产生此名称?
当我运行 docker-compose up -d时,它使用 master_master图像启动一个容器(称为o​​jit_code)。
当我运行 master_master_1时,它使用 docker-compose -p jenkins up -d图像启动一个容器(称为o​​jit_code)。
除了不同的容器名称之外,生成的运行中的容器也不同,因为我可以看到Jenkins版本不同(根据我在Dockerfile中所做的更改)。
在运行这两个命令之间,我根本不更改docker-compose文件,但是运行了不同的镜像。
我找到的用于指定-p(--project-name)标志的文档指出:

Sets the project name. This value is prepended along with the servicename to the container on start up. For example, if your project nameis myapp and it includes two services db and web, then Composestarts containers named myapp_db_1 and myapp_web_1 respectively.

Setting this is optional. If you do not set this, theCOMPOSE_PROJECT_NAME defaults to the basename of the projectdirectory.


没有什么让我相信 jenkins_master标志将导致运行其他图像。
那么这是怎么回事?
docker-compose如何选择要运行的镜像?
这是由于图像 jenkins_master_1-p的名称引起的吗?

最佳答案

如果要使用docker-compose -p选项,则需要将其与每个docker-compose命令一起使用,包括docker-compose build
如果您的docker-compose.yml文件未指定image:,则Compose将从当前项目名称和Compose服务名称构造一个图像名称。项目名称和Docker对象元数据是记住所有内容的唯一方法。因此,这里发生的是普通的docker-compose buildmaster项目中的master服务构建了图像,但是docker-compose -p jenkins up随后在master项目中寻找了jenkins服务,并找到了另一个图像。

docker-compose -p jenkins build
docker-compose -p jenkins up -d
设置 COMPOSE_PROJECT_NAME 环境变量可能比较容易,也可能不容易,可以将其放在 .env file中。在Jenkins上下文中,我也可能会考虑使用 Jenkins's Docker integration构建(并推送)图像,并且仅在 image:文件中引用 docker-compose.yml

关于docker - 为什么在使用 '-p'标志运行时docker-compose启动不同的镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63187716/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com