Shell Docker compose won';找不到$PWD环境变量

Shell Docker compose won';找不到$PWD环境变量,shell,docker,environment-variables,Shell,Docker,Environment Variables,这是我的docker compose: version: '2' services: couchpotato: build: context: ./couchpotato dockerfile: Dockerfile ports: - 5050:5050 volumes: - "${PWD}/couchpotato/data:/home/CouchPotato/data/" - "${PWD}/couchp

这是我的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/"
当我在shell中运行它时,在docker-compose.yml目录中,我得到:

WARNING: The PWD variable is not set. Defaulting to a blank string.
而构图以PWD为空开始


我在文件中没有看到任何错误,如图所示:

您不需要
${PWD}
为此,您只需将路径设置为相对路径并将其展开即可(撰写路径与由
docker run处理的路径之间的一个主要区别


至于为什么compose没有看到这个变量,这取决于您的shell。Compose在docker Compose命令中查找导出的环境变量、.env文件的内容和命令行标志。如果变量中的每一个都为空,您将收到警告。

我的建议:将所有
$PWD
更改为
如果您使用
sudo
运行,则$PWD将不起作用。尝试Docker for Linux的推荐设置

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

$ sudo env | grep -i pwd
$ env | grep -i pwd
PWD=/home/user
OLDPWD=/

我的一个环境变量也有同样的问题。仔细查看我的
bashrc
文件后,我发现我没有导出该变量。
之前:
VAR=

之后:
export VAR=

如果需要,请在调用
docker compose up之前调用此命令:

set PWD=%CD%

如果从同一个shell运行
env | grep PWD
,会发生什么情况?@BMitch我得到我的正常PWD:/home/user/。。。和OLDPWD=…这与运行docker compose命令时使用的shell完全相同?你没有用某种exec启动它,通过任何一种调度程序,等等?因为当我在本地运行类似的程序时,我无法在bash下重现这个错误。@BMitch-nope,我刚刚运行了docker-compose。我就是这么做的:echo$PWD并输入,打印PWD。然后docker在下一行写了篇文章,得到了警告在我的案件中,我碰巧是。sudo保留现有的环境变量为我解决了这个问题
sudo-ebash-c'docker compose up'
无论出于何种原因,docker For Windows都会与相对目录混淆。${PWD}方法效果更好;我使用Docker compose与Windows Linux子系统。我可以解释这样一个事实:相对路径(如
/config/nginx
)不起作用,并且给出的错误
不是目录。至少对我来说。使用
${PWD}
而不是
解决了需要牢记的问题,如果您使用的是-f/path/to/compose.yml,那么相对体积将是相对于模板的。有时,将它与PWD相关联可能很有用,因此您可能希望将其包括在内。这和贝壳有关。如果您在没有外壳的情况下运行自动化,则可能必须手动设置PWD。@boyd我目前正在使用ubuntu wsl2,并在其中安装了docker和docker compose,而不是在windows上。当尝试使用${PWD}时,我得到以下警告:PWD变量未设置。默认为空字符串。当docker-compose.yml不在当前目录中时,dot(.)和PWD变量可以扩展为不同的值:“.”扩展到目录,其中YAML文件为,PWD为当前目录。因此它们可以用于不同的目的。这与BMitch在docker-compose中的回答完全相同。yml$PWD与“@MBorg不,不是-这个答案短得多。先生,我可以在twitter上联系emaifollow me@milmeninos:)
set PWD=%CD%