运行多个实例时,Docker 组合不会在容器名称之前添加项目名称

Mou*_*sse 3 docker docker-compose

到目前为止,我有一组使用docker-compose up -d非常基本的 docker 运行

我想运行我的项目的多个实例,并且我已经阅读了这个 Run multiple docker compose

现在,当运行docker-compose up -p PRNAME -dcompose 时,不会将项目名称预先添加到容器中,prname_container1并且我收到以下错误:

ERROR: for container1  Cannot create container for service service1: Conflict. The container name "/container1" is already in use by container "f7aeb2ef782556ae5b0". You have to remove (or rename) that container to be able to reuse that name.
Run Code Online (Sandbox Code Playgroud)

我可能在这里遗漏了一些东西。

我的 docker-compose.yml 的一部分看起来像

services:
  service1:
    image: "${PROJECT_REPO}:image"
    container_name: "container1"
    ports:
      - 443:443
      - 8000:80
    networks:
      - db
      - proxy
      - oauth
    depends_on:
      - db
Run Code Online (Sandbox Code Playgroud)

Dav*_*aze 7

当您container_name:docker-compose.yml文件中明确设置时,容器名称将与您指定的完全相同;Docker Compose 不会向其添加每个目录的前缀。

通常这对您来说根本无关紧要,并且可以安全地删除container_name:. 您仍然可以使用其他容器的服务名称docker-compose.yml作为主机名访问其他容器,并且docker-composeCLI 为管理命令提供了包装器,这些命令docker-compose stop将作用于正确的容器。

你也会遇到麻烦,ports:这里没有一个明确的解决方案。只有一个容器或进程可以绑定到主机上的特定端口。你可以去掉 中的第一个端口号ports:,Docker 会为你选择一个端口

ports:
  - '80'
  - '443'
Run Code Online (Sandbox Code Playgroud)

但是接下来需要手动查找对应的主机端口号

docker-compose port service1 80
Run Code Online (Sandbox Code Playgroud)