docker-compose 在 Ubuntu WSL 2 上找不到环境变量 $PWD
docker-compose not finding environment variable $PWD on Ubuntu WSL 2
我对 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 运行ning。另外需要注意的是,我是 运行宁 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 中,或者该文件夹需要符号链接到 PostgreSQL 具有 read-write 访问权限的其他任意文件夹。容器的意义在于根据您的需要构建它,因此在正常情况下,您应该知道所有内容的去向并明确设置卷的路径。
我对 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 运行ning。另外需要注意的是,我是 运行宁 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 中,或者该文件夹需要符号链接到 PostgreSQL 具有 read-write 访问权限的其他任意文件夹。容器的意义在于根据您的需要构建它,因此在正常情况下,您应该知道所有内容的去向并明确设置卷的路径。