如何运行几张Docker相似名字的图片合成?
How to run a few Docker Compose with similar names of images?
我有超过 10 个架构相似但不完全相同的项目。 docker-compose 中的图片名称相同。所以我需要 运行 将它们全部放在一个液滴上。我怎样才能 运行 它没有冲突?
Docker compose 使用当前目录作为“项目名”,例如:
cd foo
docker-compose up
这将创建声明为 foo_<servicename>_1
的每个服务。
您可以在 docker-compose
上指定一个参数来更改每个撰写文件的默认项目名称:
docker-compose --file mycompose.yml --project-name anyname up
--file
can be -f
and --project-name
can be -p
由于您的容器不能具有完全相同的名称,但您可以使用默认使用的 目录前缀 名称。
让我们假设您有这样的目录结构:
/home/your_project_directory/1/
/home/your_project_directory/2/
/home/your_project_directory/3/
/home/your_project_directory/4/
在目录 1
中,您有一个包含以下内容的 docker-compose.yml
文件:
version: '3.9'
services:
httpd:
image: nginx
restart: always
volumes:
nginx: {}
假设您在目录 /home/your_project_directory/
.
现在让我们 cd
进入这四个目录中的每一个,然后 运行 这个命令:
ln -s /home/your_project_directory/2/docker-compose.yml $PWD/2
这将从目录 1
中的 docker-compose.yml
文件创建一个软 link 到 2
.
并对其他两个目录 3
和 4
.
重复此命令
完成所有操作后,您可以通过以下命令验证每个操作:
find /home/your_project_directory/ -name 'docker-compose.yml' ls -lh {} \;
此命令 在目录 /home/your_project_directory/ 中找到 s 任何名为 docker 的文件-compose.yml 然后运行s ls -lh THAT_FILE,如下:
-rw-r--r-- 1 root root 105 Apr 23 04:20 /home/your_project_directory/1/docker-compose.yml
lrwxrwxrwx 1 root root 29 Apr 23 04:11 /home/your_project_directory/2/docker-compose.yml -> /home/your_project_directory/1/docker-compose.yml
lrwxrwxrwx 1 root root 29 Apr 23 04:11 /home/your_project_directory/3/docker-compose.yml -> /home/your_project_directory/1/docker-compose.yml
lrwxrwxrwx 1 root root 29 Apr 23 04:12 /home/your_project_directory/4/docker-compose.yml -> /home/your_project_directory/1/docker-compose.yml
好,现在让我们用另一个find
命令来组合它们:
find . -name "docker-compose.yml" -exec docker-compose -f {} up -d \;
同样,此文件找到任何名为 docker-compose.yml
的文件,然后是 运行s docker-compose -f THAT_FILE up -d
命令。
因此,这四个命令将 运行:
docker-compose -f 1/docker-compose.yml up -d
docker-compose -f 2/docker-compose.yml up -d
docker-compose -f 3/docker-compose.yml up -d
docker-compose -f 4/docker-compose.yml up -d
如果你 运行 docker ps
,你应该看到类似的输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4dac5dfba581 nginx "/docker-entrypoint.…" 12 minutes ago Up 12 minutes 80/tcp 1_httpd_1
d517a156f6a1 nginx "/docker-entrypoint.…" 12 minutes ago Up 12 minutes 80/tcp 2_httpd_1
ed6223ca5411 nginx "/docker-entrypoint.…" 12 minutes ago Up 12 minutes 80/tcp 3_httpd_1
0fa78f2ba8bf nginx "/docker-entrypoint.…" 12 minutes ago Up 12 minutes 80/tcp 4_httpd_1
但根据您的需要和要求,您可以将任何详细信息添加到 docker-compose.yml
文件中。
注意您不能在此文件中使用相同的端口映射,因为您会收到端口已分配错误。
另一种方法是将一个文件 cp
放入其他三个目录并使用不同端口的端口映射,如 1/docker-compose.yml
:
ports:
- "8080:80"
和2/docker-compose.yml
:
ports:
- "8081:80"
等等
我有超过 10 个架构相似但不完全相同的项目。 docker-compose 中的图片名称相同。所以我需要 运行 将它们全部放在一个液滴上。我怎样才能 运行 它没有冲突?
Docker compose 使用当前目录作为“项目名”,例如:
cd foo
docker-compose up
这将创建声明为 foo_<servicename>_1
的每个服务。
您可以在 docker-compose
上指定一个参数来更改每个撰写文件的默认项目名称:
docker-compose --file mycompose.yml --project-name anyname up
--file
can be-f
and--project-name
can be-p
由于您的容器不能具有完全相同的名称,但您可以使用默认使用的 目录前缀 名称。
让我们假设您有这样的目录结构:
/home/your_project_directory/1/
/home/your_project_directory/2/
/home/your_project_directory/3/
/home/your_project_directory/4/
在目录 1
中,您有一个包含以下内容的 docker-compose.yml
文件:
version: '3.9'
services:
httpd:
image: nginx
restart: always
volumes:
nginx: {}
假设您在目录 /home/your_project_directory/
.
现在让我们 cd
进入这四个目录中的每一个,然后 运行 这个命令:
ln -s /home/your_project_directory/2/docker-compose.yml $PWD/2
这将从目录 1
中的 docker-compose.yml
文件创建一个软 link 到 2
.
并对其他两个目录 3
和 4
.
完成所有操作后,您可以通过以下命令验证每个操作:
find /home/your_project_directory/ -name 'docker-compose.yml' ls -lh {} \;
此命令 在目录 /home/your_project_directory/ 中找到 s 任何名为 docker 的文件-compose.yml 然后运行s ls -lh THAT_FILE,如下:
-rw-r--r-- 1 root root 105 Apr 23 04:20 /home/your_project_directory/1/docker-compose.yml
lrwxrwxrwx 1 root root 29 Apr 23 04:11 /home/your_project_directory/2/docker-compose.yml -> /home/your_project_directory/1/docker-compose.yml
lrwxrwxrwx 1 root root 29 Apr 23 04:11 /home/your_project_directory/3/docker-compose.yml -> /home/your_project_directory/1/docker-compose.yml
lrwxrwxrwx 1 root root 29 Apr 23 04:12 /home/your_project_directory/4/docker-compose.yml -> /home/your_project_directory/1/docker-compose.yml
好,现在让我们用另一个find
命令来组合它们:
find . -name "docker-compose.yml" -exec docker-compose -f {} up -d \;
同样,此文件找到任何名为 docker-compose.yml
的文件,然后是 运行s docker-compose -f THAT_FILE up -d
命令。
因此,这四个命令将 运行:
docker-compose -f 1/docker-compose.yml up -d
docker-compose -f 2/docker-compose.yml up -d
docker-compose -f 3/docker-compose.yml up -d
docker-compose -f 4/docker-compose.yml up -d
如果你 运行 docker ps
,你应该看到类似的输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4dac5dfba581 nginx "/docker-entrypoint.…" 12 minutes ago Up 12 minutes 80/tcp 1_httpd_1
d517a156f6a1 nginx "/docker-entrypoint.…" 12 minutes ago Up 12 minutes 80/tcp 2_httpd_1
ed6223ca5411 nginx "/docker-entrypoint.…" 12 minutes ago Up 12 minutes 80/tcp 3_httpd_1
0fa78f2ba8bf nginx "/docker-entrypoint.…" 12 minutes ago Up 12 minutes 80/tcp 4_httpd_1
但根据您的需要和要求,您可以将任何详细信息添加到 docker-compose.yml
文件中。
注意您不能在此文件中使用相同的端口映射,因为您会收到端口已分配错误。
另一种方法是将一个文件 cp
放入其他三个目录并使用不同端口的端口映射,如 1/docker-compose.yml
:
ports:
- "8080:80"
和2/docker-compose.yml
:
ports:
- "8081:80"
等等