【问题标题】:How to run a few Docker Compose with similar names of images?如何运行几个具有相似图像名称的 Docker Compose?
【发布时间】:2021-04-22 17:41:59
【问题描述】:

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

【问题讨论】:

  • 您尝试了哪些方法,遇到了哪些错误?请附上minimal reproducible example
  • 如果你在 Linux 上,你可以创建多个目录并在每个目录中创建一个软链接,然后运行每个 docker compose 文件。名称将是directoryName_serviceName
  • @BMitch 例如:github.com/kosyachniy/web。如果我将这个项目复制到一个液滴中并运行,它们就会倒下。
  • @Saeed 是的,Linux。但是如何创建软链接?哪些命令?
  • 你怎么知道他们失败了?你遇到了什么错误?请使用您正在执行的步骤以及您遇到的问题更新您的问题。

标签: docker server docker-compose droplet


【解决方案1】:

Docker compose 使用当前目录作为“项目名称”,例如:

cd foo
docker-compose up

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

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

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

--file 可以是-f--project-name 可以是-p

【讨论】:

  • 项目名称包含在容器名称中(假设您没有不必要地使用container_name: 覆盖它们)。您通常会看到像 project_service_1 这样的容器名称。
  • @DavidMaze 你是对的。我以前是`container_name`。没有它,一切正常!
【解决方案2】:

由于您的容器不能具有完全相同的名称,但您可以使用 目录前缀 默认使用的名称。

让我们假设你有这样的目录结构:

/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"

等等

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多