如何更改主机上的docker卷地址

如何更改主机上的docker卷地址,docker,docker-compose,Docker,Docker Compose,我在docker compose文件中动态创建docker卷。因此,它总是在主机上的var/lib/docker/volumes/volumes\u name/\u data处创建卷。我需要知道1)如何在docker compose文件中更改此地址?2) 例如,如何从.env文件中读取卷名 version: "3.5" services: service1: image: ... container_name: $CONTAINER_NAME env_file: .

我在docker compose文件中动态创建docker卷。因此,它总是在主机上的
var/lib/docker/volumes/volumes\u name/\u 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\u文件

见下例:

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
文件将仅替换
服务
下的变量

相反,我建议安装文件系统卷。下面的示例将使用相对路径,但也可以使用绝对路径

文件/文件夹:

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
环境署署长


这将使用
testfile2.txt
装载
/testfolder2
,您是否阅读了Docker文档中如何使用.env文件?我有相同的结构,$VOL_NAME的值类似于'ABCD',但它给我以下错误消息:错误:撰写文件'/./Docker Compose.yaml'无效,因为:不允许卷值附加属性($VOL_NAME'是意外的)你能给我看一下你的全部配置(编辑你的帖子)吗?您是否使用较旧的docker compose版本?您从哪里启动docker compose?
//docker-compose.yaml
参考似乎有些奇怪。我刚刚用docker-compose文件更新了我的原始帖子,我使用的是v1.18.0Oh好的,所以不太一样。
env_文件
是在服务级别设置的,因此卷定义似乎没有从
.env
文件接收值。您能解释一下吗,我不太明白。我应该换什么?
VAR=./testfolder2