[英]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。另外需要注意的是,我正在運行 ZSH 而不是 ZE027C5FF7F2AD257E3AFZA0FF10B305B。
我遵循了文檔中提到的確切步驟。
我還檢查了另一個似乎與我相似但不完全相同的問題,因為可以用./
替換${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 具有讀寫訪問權限的不同任意文件夾。 容器的重點是根據您的需要構建它,因此在正常情況下,您應該知道所有內容的去向並明確設置卷的路徑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.