首页 > 解决方案 > 如何更改主机上的 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

我问第二个问题的原因是显然无法参数化卷的名称。

标签: dockerdocker-compose

解决方案


要从.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

这将./testfolder2testfile2.txt.


推荐阅读