为什么docker compose在使用'-p';旗帜
我们在Docker容器中运行Jenkins服务器,我从一位离开的同事那里接管了该容器。 我看到了一些我不理解的行为,并且无法从文档中了解到发生了什么。 我的文件夹结构如下所示:为什么docker compose在使用'-p';旗帜,docker,docker-compose,Docker,Docker Compose,我们在Docker容器中运行Jenkins服务器,我从一位离开的同事那里接管了该容器。 我看到了一些我不理解的行为,并且无法从文档中了解到发生了什么。 我的文件夹结构如下所示: └── Master ├── docker-compose.yml └── jenkins-master └── Dockerfile 我的docker-compose.yaml文件如下所示(这只是相关部分的一个片段): 我已经在Jenkins master/Dockerfile中更新了
└── Master
├── docker-compose.yml
└── jenkins-master
└── Dockerfile
我的docker-compose.yaml文件如下所示(这只是相关部分的一个片段):
我已经在Jenkins master/Dockerfile
中更新了基本Jenkins映像的版本,然后使用docker compose build
重新构建。
这将成功并产生一个名为master\u 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
创建的存储库标记图像ID大小
master_master最近16小时前704MB
jenkins_master最近10个月前的707MB
据我所知,名称master\u master
是基本文件夹名称(即master
)和docker compose.yaml
文件中master
的服务名称的结果。
我不知道现有图像如何以名称jenkins\u master
结束。文件夹名称是否必须是Jenkins
而不是Master
,或者是否有其他方式产生此名称
当我运行docker compose up-d
时,它使用master\u master
图像启动一个容器(称为master\u master\u 1
)
当我运行docker compose-p jenkins up-d
时,它使用jenkins\u master
图像启动一个容器(称为jenkins\u master\u 1
)
除了不同的容器名称外,生成的运行容器也不同,因为我可以看到Jenkins版本不同(根据我在Dockerfile中所做的更改)。
在运行这两个命令和运行不同的图像之间,我根本不会更改docker compose文件
我找到的用于指定-p(--project name)标志的文档说明:
设置项目名称。此值与服务一起预先设置
启动时容器的名称。例如,如果您的项目名称
是myapp
,它包括两个服务db
和web
,然后组合
分别启动名为myapp\u db\u 1
和myapp\u web\u 1
的容器
此设置是可选的。如果未设置此项,则
COMPOSE\u PROJECT\u NAME
默认为项目的basename
目录
没有什么能让我相信-p
标志会导致运行不同的映像
这是怎么回事?
docker compose如何选择要运行的映像?
发生这种情况是因为docker-compose.yml文件中的image
master\u master
vsjenkins\u master
?添加image选项的名称。它将使用指定的docker映像创建容器
build: ./jenkins-master
image: dockerimage_name:tag
如果要使用
docker compose-p
选项,则需要将其与每个docker compose
命令一起使用,包括docker compose build
如果您的docker compose.yml
文件未指定图像:
,则compose将根据当前项目名称和compose服务名称构造图像名称。项目名称和Docker对象元数据是它记住任何内容的唯一方式。因此,这里发生的事情是普通的docker compose build
为master
项目中的master
服务构建映像,但是docker compose-p jenkins up
在jenkins
项目中查找master
服务,并找到另一个映像
docker-compose -p jenkins build
docker-compose -p jenkins up -d
设置环境变量可能会更容易,也可能不会更容易,可能会将其放在一个特定的位置。在詹金斯上下文中,我也可以考虑使用(构建和推送)图像,而只引用<代码>图像:<代码> <代码> DOCK撰写。YLL>代码>文件。我感谢响应,并且我理解这将做什么,但是这不能回答我的问题。我试图理解为什么docker compose仅仅因为指定了-p标志就运行两个不同的图像。我本以为它会运行同一个映像,但容器的名称会有所不同。
docker-compose -p jenkins build
docker-compose -p jenkins up -d