docker - 如何更改主机上的 docker 卷地址
问题描述
我在我的 docker-compose 文件中动态创建了一个 docker 卷。所以它总是在主机上创建卷var/lib/docker/volumes/volume_name/_data
。我需要知道 1)如何在我的 docker-compose 文件中更改此地址?2)我如何从.env
文件中读取卷名,比如说
version: "3.5"
services:
service1:
image: ...
container_name: $CONTAINER_NAME
env_file: ./.env
ports:
- "$HOSTPORT:5000"
environment:
- JAVA_HOME=/usr/lib/jvm/java
volumes:
- $VOL_NAME:/tmp
volumes:
$VOL_NAME:
external: true
我问第二个问题的原因是显然无法参数化卷的名称。
解决方案
要从.env
文件中读取卷名,您需要env_file
在服务中指定。
请参见下面的示例:
version: '3.1'
services:
nginx:
env_file: .env
image: nginx:alpine
volumes:
- $VAR:/var/www/develop
测试步骤:
Users-MacBook-Pro:voltest myuser$ ls -la
total 16
drwxr-xr-x 5 myuser staff 160 12 Sep 15:06 .
drwxr-xr-x 38 myuser staff 1216 12 Sep 15:03 ..
-rw-r--r-- 1 myuser staff 17 12 Sep 15:04 .env
-rw-r--r-- 1 myuser staff 120 12 Sep 15:04 docker-compose.yml
drwxr-xr-x 3 myuser staff 96 12 Sep 15:04 testfolder
Users-MacBook-Pro:voltest myuser$ ls -la testfolder/
total 0
drwxr-xr-x 3 myuser staff 96 12 Sep 15:04 .
drwxr-xr-x 5 myuser staff 160 12 Sep 15:06 ..
-rw-r--r-- 1 myuser staff 0 12 Sep 15:04 testfile
Users-MacBook-Pro:voltest myuser$ cat docker-compose.yml
version: '3.1'
services:
nginx:
env_file: .env
image: nginx:alpine
volumes:
- $VAR:/var/www/develop
Users-MacBook-Pro:voltest myuser$ cat .env
VAR=./testfolder
Users-MacBook-Pro:voltest myuser$ docker-compose exec nginx ls -la /var/www/develop/
total 4
drwxr-xr-x 3 root root 96 Sep 12 19:04 .
drwxr-xr-x 3 root root 4096 Sep 12 19:04 ..
-rw-r--r-- 1 root root 0 Sep 12 19:04 testfile
编辑:经过一些来回的评论。
您发布的配置不适用于命名卷,因为该.env
文件只会替换services
.
相反,我建议安装文件系统卷。下面的示例将使用相对路径,但您也可以使用绝对路径。
文件/文件夹:
testfolder1/
testfile1.txt
testfolder2/
testfile2.txt
.env
docker-compose.yml
码头工人-compose.yml
version: '3.1'
services:
nginx:
env_file: .env
image: nginx:alpine
volumes:
- $VAR:/var/www/develop
.env
VAR=./testfolder2
这将./testfolder2
与testfile2.txt
.
推荐阅读
- javascript - 巨大的块大小会减慢网站加载速度
- python - 如何分水岭两个相连的圆
- reactjs - Redux 无法将道具添加到状态中
- join - 保留在单独列表中找到的行
- javascript - 使对象在 JavaScript fetch 函数之外可访问
- c# - C# API - 从另一个类调用异步任务
- reactjs - 如何使用 Jest/Enzyme 在 Echarts 上测试 Click 事件?
- flutter - 无法从 firebase Stream 查询返回对象列表
- c# - 由于在 c# 中读写 Excel 文档,资源监控中的内存增长(内存泄漏)
- youtube-iframe-api - 在 onYouTubeIframeAPIReady 中修改 DOM 时未触发 Youtube iframe API 事件