Docker在另一个目录中撰写会影响其他容器

时间:2019-02-24 22:26:14

标签: 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:

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

Recreating docker_postgres_1 ... done
Recreating docker_pgadmin_1  ... done

出了什么问题?

2 个答案:

答案 0 :(得分:0)

我相信发生这种情况是因为在尝试新项目时,先前项目上的容器会继续运行。

尝试在当前文件夹之前停止上一个文件夹中的容器。

答案 1 :(得分:0)

Docker Compose将名称前缀附加到它创建的所有内容,但是默认前缀仅基于当前目录的基本名称。如果您有这样的布局

projectA
+-- docker
|   \-- docker-compose.yml
projectB
\-- docker
    \-- docker-compose.yml

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

您可以通过使用docker-compose -p optionsetting a COMPOSE_PROJECT_NAME environment variable重命名目录之一来解决此问题。在项目的顶级目录中看到docker-compose.yml文件并不稀奇,这可能有助于消除歧义。