簡體   English   中英

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。另外需要注意的是,我正在運行 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM