簡體   English   中英

權限被拒絕:Docker 中的“/var/lib/pgadmin/sessions”

[英]Permission denied: '/var/lib/pgadmin/sessions' in Docker

我遇到了這篇文章中描述的相同問題,但在 docker 容器內。 我真的不知道我的 pgadmin 文件駐留在何處以編輯它的默認路徑。我如何解決此問題 go? 請盡可能詳細,因為我不知道如何docker。

這是docker-compose up命令的逐字摘要:

php-worker_1  | 2020-11-11 05:50:13,700 INFO spawned: 'laravel-worker_03' with pid 67
pgadmin_1     | [2020-11-11 05:50:13 +0000] [223] [INFO] Worker exiting (pid: 223)
pgadmin_1     | WARNING: Failed to set ACL on the directory containing the configuration database:
pgadmin_1     |            [Errno 1] Operation not permitted: '/var/lib/pgadmin'
pgadmin_1     | HINT   : You may need to manually set the permissions on
pgadmin_1     |          /var/lib/pgadmin to allow pgadmin to write to it.
pgadmin_1     | ERROR  : Failed to create the directory /var/lib/pgadmin/sessions:
pgadmin_1     |            [Errno 13] Permission denied: '/var/lib/pgadmin/sessions'
pgadmin_1     | HINT   : Create the directory /var/lib/pgadmin/sessions, ensure it is writeable by
pgadmin_1     |          'pgadmin', and try again, or, create a config_local.py file
pgadmin_1     |          and override the SESSION_DB_PATH setting per
pgadmin_1     |          https://www.pgadmin.org/docs/pgadmin4/4.27/config_py.html
pgadmin_1     | /usr/local/lib/python3.8/os.py:1023: RuntimeWarning: line buffering (buffering=1) isn't supported in binary mode, the default buffer size will be used
pgadmin_1     |   return io.open(fd, *args, **kwargs)
pgadmin_1     | [2020-11-11 05:50:13 +0000] [224] [INFO] Booting worker with pid: 224

我的 docker-compose.yml:

  ### pgAdmin ##############################################
  pgadmin:
    image: dpage/pgadmin4:latest
    environment:
      - "PGADMIN_DEFAULT_EMAIL=${PGADMIN_DEFAULT_EMAIL}"
      - "PGADMIN_DEFAULT_PASSWORD=${PGADMIN_DEFAULT_PASSWORD}"
    ports:
      - "${PGADMIN_PORT}:80"
    volumes:
      - ${DATA_PATH_HOST}/pgadmin:/var/lib/pgadmin
    depends_on:
      - postgres
    networks:
      - frontend
      - backend

好的。 看起來當您嘗試運行pgadmin服務時出現問題。

這部分

  ### pgAdmin ##############################################
  pgadmin:
    image: dpage/pgadmin4:latest
    environment:
      - "PGADMIN_DEFAULT_EMAIL=${PGADMIN_DEFAULT_EMAIL}"
      - "PGADMIN_DEFAULT_PASSWORD=${PGADMIN_DEFAULT_PASSWORD}"
    ports:
      - "${PGADMIN_PORT}:80"
    volumes:
      - ${DATA_PATH_HOST}/pgadmin:/var/lib/pgadmin
    depends_on:
      - postgres
    networks:
      - frontend
      - backend

如您所見,您試圖將本地目錄${DATA_PATH_HOST}/pgadmin到容器的/var/lib/pgadmin

    volumes:
      - ${DATA_PATH_HOST}/pgadmin:/var/lib/pgadmin

正如您在本文中所讀到的,您本地${DATA_PATH_HOST}/pgadmin目錄的 UID 和 GID 必須是5050 這是5050嗎?

你可以通過運行來檢查它

ls -l ${DATA_PATH_HOST}

Output 會像

drwxrwxr-x 1 5050 5050 12693 Nov 11 14:56 pgadmin

要么

drwxrwxr-x 1 SOME_USER SOME_GROUP 12693 Nov 11 14:56 pgadmin

如果SOME_USERSOME_GROUP的 ID 是5050 ,就可以了。 5050一樣也行。 如果沒有,請嘗試按照上面文章中的描述進行操作。

sudo chown -R 5050:5050 ${DATA_PATH_HOST}/pgadmin

您還需要檢查環境變量是否存在:

# run it as same user as you running docker-compose
echo ${DATA_PATH_HOST}

如果 output 為空,則需要設置${DATA_PATH_HOST}或允許 docker 從文件中讀取變量。 有很多方法可以做到這一點。

如果您使用的是 Windows,請將此行添加到您的docker-compose.yml中。 它使容器可以訪問您的本地文件夾

version: "3.9"
services:
  postgres:
    user: root  <- this one 
    container_name: postgres_container
    image: postgres:14.2 

在 kube.netes 環境中運行時,我必須添加這些值。

   spec:
     containers:
       - name: pgadmin
         image: dpage/pgadmin4:5.4
         securityContext:
           runAsUser: 0
           runAsGroup: 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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