Docker compose在另一个目录会影响其他容器

Ant*_*den 3 docker docker-compose

我有一个问题。我将我的docker-compose文件用于一个项目。然后我将其复制到另一个目录以运行另一个容器。但每当我这样做时,它都会重新创建现有容器,或者如果我使用 down 命令,它还会销毁另一个目录中的容器,可能会出现什么问题?

这是我的配置。

version: '3.5'

services:
  postgres:
    image: postgres
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      PGDATA: /data/postgres
    volumes:
      - postgres:/data/postgres
    ports:
      - "5440:5432"
    networks:
      - postgres
    restart: unless-stopped

  pgadmin:
    image: dpage/pgadmin4
    environment:
      PGADMIN_DEFAULT_EMAIL: admin@admin.com
      PGADMIN_DEFAULT_PASSWORD: rootme
    volumes:
      - pgadmin:/root/.pgadmin
    ports:
      - "8440:80"
    networks:
      - postgres
    restart: unless-stopped

networks:
  postgres:
    driver: bridge

volumes:
  postgres:
  pgadmin:
Run Code Online (Sandbox Code Playgroud)

例如,当我docker-compose up -d从另一个目录运行时,它会重新创建容器

Recreating docker_postgres_1 ... done
Recreating docker_pgadmin_1  ... done
Run Code Online (Sandbox Code Playgroud)

有什么问题吗?

Dav*_*aze 5

Docker Compose 会为其创建的所有内容附加一个名称前缀,但默认前缀仅基于当前目录的基本名称。如果你有这样的布局

projectA
+-- docker
|   \-- docker-compose.yml
projectB
\-- docker
    \-- docker-compose.yml
Run Code Online (Sandbox Code Playgroud)

那么两个docker-compose实例都会认为项目名称只是docker(包含 的目录的名称docker-compose.yml)并创建容器名称,例如docker_postgres_1.

docker-compose -p您可以通过使用选项重命名其中一个目录或设置COMPOSE_PROJECT_NAME环境变量来解决此问题。docker-compose.yml在项目的顶级目录中看到文件并不罕见,这可能有助于消除歧义。