【问题标题】:Getting permission exception when run docker-compose up with dpage/pgadmin4 image使用 dpage/pgadmin4 映像运行 docker-compose up 时获取权限异常
【发布时间】:2020-02-05 07:28:50
【问题描述】:

我正在尝试使用 pgadmin4 构建一个 ruby​​ rails docker-compose postgreSQL db,但不断从容器中获取权限异常。甚至容器中的 /bin/sh 也会返回同样的错误。

我使用的是 Ubuntu 18.04.3 LTS

完整日志

db_1            | 
db_1            | PostgreSQL Database directory appears to contain a database; Skipping initialization
db_1            | 
db_1            | LOG:  database system was shut down at 2020-02-05 07:15:13 UTC
db_1            | LOG:  MultiXact member wraparound protections are now enabled
db_1            | LOG:  autovacuum launcher started
db_1            | LOG:  database system is ready to accept connections
pgadmin_1       | [2020-02-05 07:15:17 +0000] [1] [INFO] Starting gunicorn 19.9.0
pgadmin_1       | [2020-02-05 07:15:17 +0000] [1] [INFO] Listening at: http://[::]:80 (1)
pgadmin_1       | [2020-02-05 07:15:17 +0000] [1] [INFO] Using worker: threads
pgadmin_1       | [2020-02-05 07:15:17 +0000] [13] [INFO] Booting worker with pid: 13
pgadmin_1       | [2020-02-05 07:15:17 +0000] [13] [ERROR] Exception in worker process
pgadmin_1       | Traceback (most recent call last):
pgadmin_1       |   File "/usr/local/lib/python3.7/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
pgadmin_1       |     worker.init_process()
pgadmin_1       |   File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/gthread.py", line 104, in init_process
pgadmin_1       |     super(ThreadWorker, self).init_process()
pgadmin_1       |   File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/base.py", line 129, in init_process
pgadmin_1       |     self.load_wsgi()
pgadmin_1       |   File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/base.py", line 138, in load_wsgi
pgadmin_1       |     self.wsgi = self.app.wsgi()
pgadmin_1       |   File "/usr/local/lib/python3.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
pgadmin_1       |     self.callable = self.load()
pgadmin_1       |   File "/usr/local/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load
pgadmin_1       |     return self.load_wsgiapp()
pgadmin_1       |   File "/usr/local/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp
pgadmin_1       |     return util.import_app(self.app_uri)
pgadmin_1       |   File "/usr/local/lib/python3.7/site-packages/gunicorn/util.py", line 350, in import_app
pgadmin_1       |     __import__(module)
pgadmin_1       |   File "/pgadmin4/run_pgadmin.py", line 4, in <module>
pgadmin_1       |     from pgAdmin4 import app
pgadmin_1       |   File "/pgadmin4/pgAdmin4.py", line 109, in <module>
pgadmin_1       |     app = create_app()
pgadmin_1       |   File "/pgadmin4/pgadmin/__init__.py", line 350, in create_app
pgadmin_1       |     paths.init_app(app)
pgadmin_1       |   File "/pgadmin4/pgadmin/utils/paths.py", line 92, in init_app
pgadmin_1       |     'The user does not have permission to read and write to the '
pgadmin_1       | Exception: The user does not have permission to read and write to the specified storage directory.
pgadmin_1       | [2020-02-05 07:15:17 +0000] [13] [INFO] Worker exiting (pid: 13)
pgadmin_1       | [2020-02-05 07:15:17 +0000] [1] [INFO] Shutting down: Master
pgadmin_1       | [2020-02-05 07:15:17 +0000] [1] [INFO] Reason: Worker failed to boot.
***_pgadmin_1 exited with code 3

docker-compose.yml 文件

version: '3'
services:
  db:
    image: postgres:9.5
    volumes:
      - postgres:/var/lib/postgresql/data
  pgadmin:
    image: dpage/pgadmin4
    volumes:
      - pgadmin:/var/lib/pgadmin/storage
    ports:
      - '3030:80'
    environment:
      PGADMIN_DEFAULT_EMAIL: 'admin'
      PGADMIN_DEFAULT_PASSWORD: password
    depends_on:
      - db
volumes:
  postgres:
  pgadmin:

(ruby rails 服务被删除,因为我认为它不相关)

revmoing pgadmin 容器中的卷允许我在容器中使用 /bin/sh,但我不能使用任何命令

【问题讨论】:

  • 听起来您的 pgadmin` 容器没有 ./pgadmin 文件夹的读/写权限?
  • @richyen 我该如何解决这个问题?我对 docker 还是有点陌生​​。我正在使用 linux,chown 或 chmod 能解决问题吗?如果是这样,我该如何使用它?
  • 我实际上并不确定——取决于您的操作系统、目录树的外观、您使用哪个操作系统用户docker-compose up 等等。

标签: postgresql docker pgadmin-4


【解决方案1】:

我遇到了同样的问题。我可以通过将卷安装在稍微不同的位置来解决它:

    volumes:
      - pgadmin:/var/lib/pgadmin4/storage

请注意,在您的脚本中,它安装在 /var/lib/pgadmin/storage

【讨论】:

    【解决方案2】:

    我在使用图像 dpage/pgadmin4:4.18 时遇到了同样的问题。挖了一下,无论出于何种原因,pgadmin 没有在服务器模式下运行,这导致它使用了不同的目录,而这些目录没有通过权限检查。

    为了解决这个问题,我添加了一个 PGADMIN_CONFIG_SERVER_MODE 环境变量并将其设置为 True。在您的情况下,您将向 docker-compose.yml 添加另一个环境变量,内容如下:

    PGADMIN_CONFIG_SERVER_MODE: True
    

    首字母大写非常重要。该行被转换为 Python 代码(对于那些想知道的人来说,config_distro.py 中的 SERVER_MODE = True),如果“T”没有大写,它将失败。

    【讨论】:

    • 我也有同样的问题。当我添加这个变量时,我得到另一个错误ERROR: The Compose file './docker-compose.yml' is invalid because: services.pgadmin.environment.PGADMIN_CONFIG_SERVER_MODE contains true, which is an invalid type, it should be a string, number, or a null。你知道如何解决这个问题吗?请注意,我确实将docker-compose.yml 文件中的第一个字母大写。
    • @eastclintw00d 我的 docker-compose.yml 文件(版本 2)中的 pgadmin 变量部分显示:- PGADMIN_CONFIG_SERVER_MODE=True 据我所知,当该行不是时,您会收到无效类型错误格式化为 docker-compose 所期望的方式。
    • 您应该在值 PGADMIN_CONFIG_SERVER_MODE: 'True' 周围加上引号
    【解决方案3】:

    尝试删除并重新创建 Docker 卷,所以

    docker volume ls

    查找卷名,后跟

    docker volume rm &lt;volume name&gt;

    这将重新创建可能导致问题的卷

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-13
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 2020-10-25
      • 2020-04-13
      • 1970-01-01
      相关资源
      最近更新 更多