【问题标题】:How to solve "Operation not permitted: '/var/lib/pgadmin'" error in laradock at Windows Subsystem for Linux?如何解决 Windows Subsystem for Linux 中 laradock 中的“不允许操作:'/var/lib/pgadmin'”错误?
【发布时间】:2020-06-07 12:03:14
【问题描述】:

我在我的 Laravel 项目中使用 Laradock 与 Nginx、Postgres 和 Pgadmin 进行 dockerizing。所有容器都运行良好,但 Pgadmin 无法这样做。这是我的错误日志,

pgadmin_1              | WARNING: Failed to set ACL on the directory containing the configuration database: [Errno 1] Operation not permitted: '/var/lib/pgadmin'
pgadmin_1              | Traceback (most recent call last):
pgadmin_1              |   File "run_pgadmin.py", line 4, in <module>
pgadmin_1              |     from pgAdmin4 import app
pgadmin_1              |   File "/pgadmin4/pgAdmin4.py", line 92, in <module>
pgadmin_1              |     app = create_app()
pgadmin_1              |   File "/pgadmin4/pgadmin/__init__.py", line 241, in create_app
pgadmin_1              |     create_app_data_directory(config)
pgadmin_1              |   File "/pgadmin4/pgadmin/setup/data_directory.py", line 40, in create_app_data_directory
pgadmin_1              |     _create_directory_if_not_exists(config.SESSION_DB_PATH)
pgadmin_1              |   File "/pgadmin4/pgadmin/setup/data_directory.py", line 16, in _create_directory_if_not_exists
pgadmin_1              |     os.mkdir(_path)
pgadmin_1              | PermissionError: [Errno 13] Permission denied: '/var/lib/pgadmin/sessions'
pgadmin_1              | sudo: setrlimit(RLIMIT_CORE): Operation not permitted
pgadmin_1              | [2020-06-07 11:48:43 +0000] [1] [INFO] Starting gunicorn 19.9.0
pgadmin_1              | [2020-06-07 11:48:43 +0000] [1] [INFO] Listening at: http://[::]:80 (1)
pgadmin_1              | [2020-06-07 11:48:43 +0000] [1] [INFO] Using worker: threads
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-06-07 11:48:43 +0000] [83] [INFO] Booting worker with pid: 83
pgadmin_1              | [2020-06-07 11:48:44 +0000] [83] [ERROR] Exception in worker process
pgadmin_1              | Traceback (most recent call last):
pgadmin_1              |   File "/usr/local/lib/python3.8/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
pgadmin_1              |     worker.init_process()
pgadmin_1              |   File "/usr/local/lib/python3.8/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.8/site-packages/gunicorn/workers/base.py", line 129, in init_process
pgadmin_1              |     self.load_wsgi()
pgadmin_1              |   File "/usr/local/lib/python3.8/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.8/site-packages/gunicorn/app/base.py", line 67, in wsgi
pgadmin_1              |     self.callable = self.load()
pgadmin_1              |   File "/usr/local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 52, in load
pgadmin_1              |     return self.load_wsgiapp()
pgadmin_1              |   File "/usr/local/lib/python3.8/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.8/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 92, in <module>
pgadmin_1              |     app = create_app()
pgadmin_1              |   File "/pgadmin4/pgadmin/__init__.py", line 241, in create_app
pgadmin_1              |     create_app_data_directory(config)
pgadmin_1              |   File "/pgadmin4/pgadmin/setup/data_directory.py", line 40, in create_app_data_directory
pgadmin_1              |     _create_directory_if_not_exists(config.SESSION_DB_PATH)
pgadmin_1              |   File "/pgadmin4/pgadmin/setup/data_directory.py", line 16, in _create_directory_if_not_exists
pgadmin_1              |     os.mkdir(_path)
pgadmin_1              | PermissionError: [Errno 13] Permission denied: '/var/lib/pgadmin/sessions'
pgadmin_1              | [2020-06-07 11:48:44 +0000] [83] [INFO] Worker exiting (pid: 83)
pgadmin_1              | WARNING: Failed to set ACL on the directory containing the configuration database: [Errno 1] Operation not permitted: '/var/lib/pgadmin'
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-06-07 11:48:44 +0000] [1] [INFO] Shutting down: Master
pgadmin_1              | [2020-06-07 11:48:44 +0000] [1] [INFO] Reason: Worker failed to boot.

我尝试了很多方法来解决这个问题。比如,

OSError: [Errno 13] Permission denied: '/var/lib/pgadmin'

https://www.pgadmin.org/docs/pgadmin4/latest/container_deployment.html

以及其他一些 github 问题及其解决方案。我还运行sudo chmod -R 777 ~/.laradock/data/pgadminsudo chmod -R 777 /var/lib/pgadmin 命令来获取权限,但仍然是相同的错误日志。你们能帮我解决这个问题吗?我认为其他一些人也在他们的本地机器上遇到了这个错误。 谢谢??????

【问题讨论】:

  • 您使用哪个 docker 命令或 docker compose 文件来启动容器?您可能正在安装不同的目录
  • 跟 StackOverflow 有什么关系?

标签: linux docker windows-subsystem-for-linux pgadmin laradock


【解决方案1】:

你可以试试这个:

sudo chown -R 5050:5050 ~/.laradock/data/pgadmin

然后重启容器。原因在容器中:

uid=5050(pgadmin) gid=5050(pgadmin)

drwx------ 4 pgadmin  pgadmin  56 Jan 27 08:25 pgadmin

【讨论】:

  • 这解决了这个问题,但提到的目录是个人目录,所以请记住在您的 docker 设置中使用映射到 /var/lib/pgadmin 的实际目录。
【解决方案2】:

使用 Kubernetes 和来自https://github.com/rowanruseler/helm-charts 的 pgadmin4 helm chart 时会发生类似的错误。

解决办法是设置:

VolumePermissions:
  enabled: true

即使没有启用持久性。这样,容器中的/var/lib/pgadmin 文件夹也被分配了正确的权限,并且可以正确创建pgadmin4.db 数据库。

【讨论】:

    【解决方案3】:

    正如其他人在上面提到的,我发现Permission denied: '/var/lib/pgadmin/sessions' in Docker 说明了持久性本地文件夹没有正确用户权限的挑战。

    运行sudo chown -R 5050:5050 ~/.laradock/data/pgadmin 并重新启动容器后,我的日志中不再出现以下错误

    PermissionError:[Errno 13] 权限被拒绝:

    【讨论】:

    【解决方案4】:

    假设您的 git repo 上已经定义了 pgadmin4.db 的文件夹,并且是 pgadmin 以外的其他用户,您可以这样做:

    postgres_interface:
      image: dpage/pgadmin4
      environment:
        - PGADMIN_DEFAULT_EMAIL=user@domain.com
        - PGADMIN_DEFAULT_PASSWORD=postgres
      ports:
        - "5050:80"
      user: root
      volumes:
        - ./env/local/pgadmin/pgadmin4.db:/pgadmin4.db
         entrypoint: /bin/sh -c "cp /pgadmin4.db /var/lib/pgadmin/pgadmin4.db && cd /pgadmin4 && /entrypoint.sh"
    

    【讨论】:

    • 不要忘记使用docker compose down 后跟docker compose up (或者docker-compose 而不是docker compose 如果您仍在使用旧版本)重新创建 docker 映像
    【解决方案5】:

    我能提供的唯一解决方案是使用

    登录容器
    docker-compose exec --user root pgadmin sh
    

    然后

    chmod 0777 /var/lib/pgadmin -R
    

    从 dpage/pgadmin4 创建自己的 dockerfile 并提前运行这些命令可能会更好。

    【讨论】:

      猜你喜欢
      • 2020-04-28
      • 1970-01-01
      • 1970-01-01
      • 2020-08-12
      • 1970-01-01
      • 1970-01-01
      • 2014-07-30
      • 1970-01-01
      • 2020-04-13
      相关资源
      最近更新 更多