我有一个问题。我将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
出了什么问题?
答案 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
option或setting a COMPOSE_PROJECT_NAME
environment variable重命名目录之一来解决此问题。在项目的顶级目录中看到docker-compose.yml
文件并不稀奇,这可能有助于消除歧义。