Docker compose将找不到$ PWD环境变量

18 shell environment-variables docker

这是我的docker-compose:

version: '2'
services:
  couchpotato:
    build:
        context: ./couchpotato
        dockerfile: Dockerfile
    ports:
     - 5050:5050
    volumes:
     - "${PWD}/couchpotato/data:/home/CouchPotato/data/"
     - "${PWD}/couchpotato/config:/home/CouchPotato/config/"
Run Code Online (Sandbox Code Playgroud)

当我在shell中运行它时,在docker-compose.yml的目录中,我得到:

WARNING: The PWD variable is not set. Defaulting to a blank string.
Run Code Online (Sandbox Code Playgroud)

并且撰写以PWD为空开始.

我没有在文件中看到任何错误,如下所示:https://docs.docker.com/compose/environment-variables/

BMi*_*tch 22

你不需要${PWD}这个,你只需要使路径相对,compose将扩展它(组合路径和处理的路径之间的一个主要区别docker run).

version: '2'
services:
  couchpotato:
    build:
        context: ./couchpotato
        dockerfile: Dockerfile
    ports:
     - 5050:5050
    volumes:
     - "./couchpotato/data:/home/CouchPotato/data/"
     - "./couchpotato/config:/home/CouchPotato/config/"
Run Code Online (Sandbox Code Playgroud)

至于为什么compose没有看到这个变量,这取决于你的shell.Compose查找导出的环境变量,.env文件的内容以及docker-compose命令的命令行标志.如果每个变量都为空,那么你就会收到警告.

  • 无论出于何种原因,Docker for Windows都会与相关目录混淆.$ {PWD}方法效果更好. (4认同)
  • 需要记住的是,如果您使用 -f /path/to/compose.yml,那么相对卷将相对于模板。有时,将其与 PWD 相关可能会很有用,因此您可能希望将其包括在内。跟外壳有关系。如果您在没有 shell 的情况下运行自动化,可能需要手动设置 PWD。 (4认同)
  • 我正在使用 Docker 与 Windows Linux 子系统组合。我可以理解相对路径(如`./config/nginx`)不起作用并给出错误`not a directory`的事实。至少对我来说。用`${PWD}`代替`.`解决问题 (3认同)
  • 当 docker-compose.yml 不在当前目录中时,点 (.) 和 PWD 变量可以扩展为不同的值:“.” 展开到目录,其中 YAML 文件所在,PWD 是您当前的目录。因此它们可以服务于不同的目的。 (2认同)

小智 13

我的建议:全部$PWD改为.

  • `.` 是相对于 docker-compose 文件的路径,而 `$PWD` 是一个环境变量,通常包含运行 docker-compose 命令的当前工作目录。它们不一样,除非您从与 yml 相同的目录运行 dc。 (9认同)
  • 这与 BMitch 的答案完全相同 (8认同)
  • @MBorg 不,不是——这个答案要短得多。 (3认同)
  • 在 docker-compose.yml 中,$PWD 与“.”的含义不同。 (2认同)

小智 9

如果您使用sudo. 尝试 Docker for Linux https://docs.docker.com/engine/install/linux-postinstall/的推荐设置。

Sudo 将以不同的用户身份运行,使用不同的env.

$ sudo env | grep -i pwd
$ env | grep -i pwd
PWD=/home/user
OLDPWD=/
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用 `sudo PWD=${PWD} docker-compose build` (2认同)