docker-compose 在 Ubuntu WSL 2 上找不到环境变量 $PWD

标签 docker ubuntu docker-compose zsh windows-subsystem-for-linux

我对 docker 比较陌生。我一直在尝试编写以下文件:

version: "3"

services: 

  postgres:
    restart: always
    image: postgres
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_DB=test_db
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD_FILE=/run/secrets/postgres-passwd
    volumes:
      - test_db:${PWD}

  pgweb:
    restart: always
    image: sosedoff/pgweb
    ports: 
      - "8081:8081" 
    environment:
      - DATABASE_URL=postgres://postgres:POSTGRES_USER@POSTGRES_PASSWORD_FILE:5432/POSTGRES_DB?sslmode=disable
    depends_on:
      - postgres

volumes: 
  test_db:

我要做的是使用环境变量 $PWD 将卷 test_db 挂载到我当前的工作目录。当我运行 docker-compose up在我的终端中,我收到以下警告:
The PWD variable is not set. Defaulting to a blank string.

现在需要注意的是,我目前使用的是在 Windows 10 上的 WSL2 上运行的 Ubuntu。另外需要注意的是,我运行的是 ZSH 而不是 BASH。

我遵循了 documentation 中提到的确切步骤。 .

我还检查了另一个 question这似乎与我的相似,但不完全相同,因为可以替换 ${PWD}./这在我的情况下根本不起作用。

使用 ./ 时而不是 $PWD我收到以下错误:
for pg_test_postgres_1  Cannot create container for service postgres:\ 
invalid volume specification: 'pg_test_test_db:.:rw': invalid mount config\ 
for type "volume": invalid mount path: '.' mount path must be absolute

最佳答案

如果你想看看你能做什么和不能做什么,这是你不能做的事情。 Docker 不会加载通常由 shell、zsh 或 bash 设置的环境变量,这无关紧要。是的,它是设置$PWD 和$OLDPWD 的shell。 Docker 可以定义一个变量,该变量将作为环境变量传递给发行版,并且在构建容器时也被 Docker 使用。还需要使用绝对路径定义卷。
此外,就像 David Maze 提到的那样,您的 PostgreSQL 数据文件夹需要专门位于/var/lib/postgresql/data 中,或者该文件夹需要符号链接(symbolic link)到 PostgreSQL 具有读写访问权限的不同任意文件夹。容器的重点是根据您的需要构建它,因此在正常情况下,您应该知道所有内容的去向并明确设置卷的路径。

关于docker-compose 在 Ubuntu WSL 2 上找不到环境变量 $PWD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61016013/

相关文章:

mysql - 启动后在 mySQL 容器中播种数据

ruby-on-rails - Docker 组合 Rails + Oracle DB

docker - Docker组成当另一个停止时启动容器

docker - 使用相同的kafka主题时如何复制微服务?

docker - 使用 docker compose 将环境变量从外部 env 文件传递​​到容器

docker - 如何在 Windows 10 32 位上运行 docker?

php - apache root 中文件的 770 权限,仍然可见

java - 用eclipse升级软件后出错

logging - Journalctl : add _SYSTEMD_UNIT field into log printout

linux - 无法使用 ImageMagick 打开 .jpg、.png 或 .tif 文件,只能使用 .gif 文件