如何避免将目录名称自动添加到 docker-compose yml 中指定的多个 docker 卷?
How to avoid auto-prepend of directory name to multiple docker volumes specified in docker-compose yml?
我在 docker-compose.yml 中定义了两个服务,每个服务都使用自己的命名卷。
这些卷不是预先创建的。我希望 docker 在第一次启动容器后创建卷,并在以后的启动中重新使用相同的卷。
docker-compose.yml
version: '2'
services:
db:
container_name: db
environment:
POSTGRES_DB=new_db_name
volumes:
- pgdata:/var/lib/postgresql/data
app:
container_name: app
depends_on:
- db
volumes:
- appdata:/app/data
volumes:
pgdata
appdata
但是,在执行 docker-compose up 命令后,docker 是 prepending 当前目录名到卷。
我想 docker 将 docker-compose yml 中指定的确切名称分配给卷。
我在这里找到了一个解决方案:
但是,我无法应用上述解决方案,因为我的 docker-compose.yml 中有多个卷,而提到的解决方案只考虑了一个卷。
从 3.4 版开始,可以在 docker-compose 文件中指定卷的名称,如下所示:
version: "3.9"
volumes:
data:
name: my-app-data
名称将按原样使用。更多信息,请查看this documentation.
所以,你的 docker-compose 应该是这样的:
# Make sure that the version is from 3.4
version: '3.9'
services:
db:
container_name: db
environment: POSTGRES_DB=new_db_name
volumes:
- 'pgdata:/var/lib/postgresql/data'
app:
container_name: app
depends_on:
- db
volumes:
- 'appdata:/app/data'
volumes:
pgdata:
name: my-pgdata # Set volume name
appdata:
name: my-appdata # Set volume name
我在 docker-compose.yml 中定义了两个服务,每个服务都使用自己的命名卷。
这些卷不是预先创建的。我希望 docker 在第一次启动容器后创建卷,并在以后的启动中重新使用相同的卷。
docker-compose.yml
version: '2'
services:
db:
container_name: db
environment:
POSTGRES_DB=new_db_name
volumes:
- pgdata:/var/lib/postgresql/data
app:
container_name: app
depends_on:
- db
volumes:
- appdata:/app/data
volumes:
pgdata
appdata
但是,在执行 docker-compose up 命令后,docker 是 prepending 当前目录名到卷。
我想 docker 将 docker-compose yml 中指定的确切名称分配给卷。
我在这里找到了一个解决方案:
但是,我无法应用上述解决方案,因为我的 docker-compose.yml 中有多个卷,而提到的解决方案只考虑了一个卷。
从 3.4 版开始,可以在 docker-compose 文件中指定卷的名称,如下所示:
version: "3.9"
volumes:
data:
name: my-app-data
名称将按原样使用。更多信息,请查看this documentation.
所以,你的 docker-compose 应该是这样的:
# Make sure that the version is from 3.4
version: '3.9'
services:
db:
container_name: db
environment: POSTGRES_DB=new_db_name
volumes:
- 'pgdata:/var/lib/postgresql/data'
app:
container_name: app
depends_on:
- db
volumes:
- 'appdata:/app/data'
volumes:
pgdata:
name: my-pgdata # Set volume name
appdata:
name: my-appdata # Set volume name