gpt4 book ai didi

ubuntu - Docker Compose 卷不会将文件保存在子文件夹中

转载 作者:太空宇宙 更新时间:2023-11-03 16:58:58 25 4
gpt4 key购买 nike

我有以下 docker-compose.yml

version: '2'

services:
web:
image: user-service-web:${WEB_IMAGE_VER}
depends_on:
- db
environment:
NODE_ENV: ${NODE_ENV}
networks:
user-service:
aliases:
- user-service-web
ports:
- "80:3000"
restart: always
db:
image: user-service-mongodb:latest
networks:
viewster-user-service:
aliases:
- user-service-mongodb
ports:
- "27017:27017"
restart: always
volumes:
- mongodb:/data/
networks:
user-service:
driver: bridge
volumes:
mongodb:

当我运行 docker-compose up 时,它会创建指定的卷 mongodb 并启动所有需要的容器。但令我困惑的是,volume文件夹有2个空文件夹:configdbdb,但里面没有数据文件。当我删除数据库容器时,它预计会导致数据丢失。

我尝试连接到数据库容器并在 /data 文件夹和 /data/db 文件夹中手动创建文件,并且只在 中创建文件/data 文件夹出现在主机卷文件夹中。似乎 docker 只能在您在卷设置中指定的文件夹中创建文件或文件夹,但不能在子文件夹中创建文件。我可能是错的。为我需要持久化的每个文件夹创建卷会很棘手。有什么方法可以为我的情况正确配置音量吗?

环境:描述:Ubuntu 14.04.3 LTS发布:14.04代号:可信赖

docker 版本:客户: 版本:1.11.2 API版本:1.23 转版本:go1.5.4 Git 提交:b9f10c9 建成时间:2016 年 6 月 1 日星期三 21:47:50 操作系统/架构:linux/amd64

服务器: 版本:1.11.2 API版本:1.23 转版本:go1.5.4 Git 提交:b9f10c9 建成时间:2016 年 6 月 1 日星期三 21:47:50 操作系统/架构:linux/amd64

Docker Compose 版本docker-compose 版本 1.7.1,构建 0a9ab35 docker 版本:1.8.1CPython 版本:2.7.9OpenSSL 版本:OpenSSL 1.0.1e 2013 年 2 月 11 日

最佳答案

您创建的 mongodb 是一个命名卷,而不是主机卷,因此它与主机文件没有连接。命名卷将位于 docker 内部目录中。当使用带有容器的空卷时,它将在该位置接收图像卷内容的副本。如果您运行 docker-compose down -v,它也会被删除。

如果你想要一个主机卷,你需要在你的数据库服务下更改为这一行:

volumes:
- ./data:/data

这将在您运行 docker-compose up 命令的文件夹内使用/创建一个数据文件夹,该文件夹是一个挂载在容器中/data 的主机卷。

更新:

作为命名卷持久化数据的证据,这里有一个简单的例子:

bash$ cat docker-compose.yml 
version: '2'

volumes:
testvol:
driver: local

services:
testapp:
image: busybox
entrypoint: "top"
volumes:
- testvol:/data

bash$ ../bin/docker-compose up -d
Creating network "test_default" with the default driver
Creating volume "test_testvol" with local driver
Creating test_testapp_1
bash$ ../bin/docker-compose exec testapp /bin/sh
/ # find /data
/data
/ # mkdir /data/sub
/ # touch /data/a
/ # touch /data/sub/b
/ # find /data
/data
/data/sub
/data/sub/b
/data/a
/ # exit
bash$ ../bin/docker-compose down
Stopping test_testapp_1 ... done
Removing test_testapp_1 ... done
Removing network test_default
bash$ ../bin/docker-compose up -d
Creating network "test_default" with the default driver
Creating test_testapp_1
bash$ ../bin/docker-compose exec testapp /bin/sh
/ # find /data
/data
/data/sub
/data/sub/b
/data/a
/ # exit

关于ubuntu - Docker Compose 卷不会将文件保存在子文件夹中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37700438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com