Postgresql 使用dpage/pgadmin4映像运行docker compose时获取权限异常
我正在尝试使用pgadmin4构建一个ruby rails docker compose postgreSQL db,但一直从容器中获取权限异常。即使容器中的/bin/sh也会返回相同的错误 我使用的是Ubuntu 18.04.3 LTS 完整日志Postgresql 使用dpage/pgadmin4映像运行docker compose时获取权限异常,postgresql,docker,pgadmin-4,Postgresql,Docker,Pgadmin 4,我正在尝试使用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_
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
(ruby rails服务被删除,因为我认为这与此无关)
重新格式化pgadmin容器中的卷允许我在容器中使用/bin/sh,但我无法使用任何命令我在映像dpage/pgadmin4:4.18中遇到了相同的问题。仔细研究了一下,不管出于什么原因,pgadmin没有在服务器模式下运行,这会导致它使用不同的目录,但权限检查失败 为了解决这个问题,我添加了一个PGADMIN\u CONFIG\u SERVER\u MODE环境变量并将其设置为True。在本例中,您将向docker-compose.yml添加另一个环境变量,其内容如下:
PGADMIN_CONFIG_SERVER_MODE: True
第一个字母大写是非常重要的。这一行被转换成Python代码(对于那些想知道的人来说,config\u distro.py中的SERVER\u MODE=True),如果“T”没有大写,它将失败。我也遇到了同样的问题。我可以通过将卷安装在稍微不同的位置来解决此问题:
volumes:
- pgadmin:/var/lib/pgadmin4/storage
请注意,在您的脚本中,它安装在
/var/lib/pgadmin/storage
尝试删除并重新创建Docker卷,以便
docker卷ls
查找卷名,后跟
docker卷rm
这将重新创建可能导致此问题的卷听起来您的pgadmin`容器没有对
/pgadmin
文件夹的读/写权限?@richyn如何解决此问题?我对docker还是个新手。我正在使用linux,chown或chmod是否解决了这个问题?如果是这样的话,我该如何使用它呢?我实际上不太确定——这取决于你的操作系统,目录树是什么样子,你用哪个操作系统用户来编写docker compose
,等等。我有完全相同的问题。添加此变量时,我遇到另一个错误错误:合成文件“/docker Compose.yml”无效,因为:services.pgadmin.environment.pgadmin\u CONFIG\u SERVER\u MODE包含true,这是一个无效类型,它应该是字符串、数字或null
。你知道怎么解决这个问题吗?注意,我确实将docker-compose.yml文件中的第一个字母大写。@eastclintw00d我的docker-compose.yml文件(版本2)中的pgadmin变量部分的内容是:-pgadmin\u CONFIG\u SERVER\u MODE=True
,据我所知,如果行的格式不是docker-compose所期望的格式,则会出现无效的类型错误。
volumes:
- pgadmin:/var/lib/pgadmin4/storage