【问题标题】:How to change the docker volume address on host machine如何更改主机上的 docker 卷地址
【发布时间】:2019-09-12 18:12:28
【问题描述】:

我在我的 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

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

【问题讨论】:

  • 那么,您是否阅读了 Docker 文档中的如何使用 .env 文件?

标签: docker docker-compose


【解决方案1】:

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

编辑:在 cmets 中来回一些之后。

您发布的配置不适用于命名卷,因为 .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

这将安装./testfolder2testfile2.txt

【讨论】:

  • 我有相同的结构,$VOL_NAME 的值类似于'ABCD',但它给了我以下错误消息:错误:撰写文件'././docker-compose.yaml'无效,因为:volumes value 不允许附加属性('$VOL_NAME' 是意外的)
  • 你能告诉我你的整个配置吗(编辑你的帖子)?您使用的是较旧的 docker-compose 版本吗?你从哪里启动 docker-compose? ././docker-compose.yaml 引用似乎很奇怪。
  • 我刚刚用 docker-compose 文件更新了我的原始帖子,我正在使用 v 1.18.0
  • 哦,好吧,所以不太一样。 env_file 设置在服务级别,因此看起来卷定义没有从 .env 文件中接收值。
  • 你能解释更多吗,我不太明白。我应该改变什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-28
  • 2022-06-14
  • 1970-01-01
  • 2016-11-28
  • 2014-10-08
  • 2023-03-09
  • 2018-02-10
相关资源
最近更新 更多