如何运行一些具有类似图像名称的Docker Compose



我有>10个架构相似但不完全相同的项目。docker compose中的图像名称相同。所以我需要在一个液滴上运行所有这些。如何在没有冲突的情况下运行它?

Docker compose使用当前directoy作为"项目名称";,例如:

cd foo
docker-compose up

这将创建声明为foo_<servicename>_1的每个服务。

您可以在docker-compose上指定一个参数,更改每个组成文件的默认项目名称:

docker-compose --file mycompose.yml --project-name anyname up

--file可以是-f--project-name可以是-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文件到2的软链接。

并对另外两个目录34重复此命令。

当你完成了所有这些操作后,你可以通过以下命令来验证每一个:

find /home/your_project_directory/ -name 'docker-compose.yml' ls -lh {} ;

此命令在目录/home/your_project_directory/中查找任何名为docker compose.yml的文件,然后运行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的文件,然后运行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"

等等。

相关内容

  • 没有找到相关文章

最新更新