我在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
我问第二个问题的原因是,显然无法对卷的名称进行参数化。
答案 0 :(得分:0)
要从.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
docker-compose.yml
version: '3.1'
services:
nginx:
env_file: .env
image: nginx:alpine
volumes:
- $VAR:/var/www/develop
.env
VAR=./testfolder2
这会将./testfolder2
与testfile2.txt
装入。