当我使用绑定卷时,我在部署一些docker映像时遇到了问题,当我检查日志时,我看到了错误,比如docker应用程序尝试创建文件夹时拒绝访问。例如,下面的docker compose创建了两个容器,一个用于postgres数据库,一个用于postgres管理面板。
version: '3.7'
services:
PostgresDB:
image: postgres
environment:
- POSTGRES_DB=MyDatabase
- POSTGRES_USER=MyUser
- POSTGRES_PASSWORD=MyPassword
volumes:
- ./data:/var/lib/postgresql/data
ports:
- '5432:5432'
PostgresDBAdmin:
image: dpage/pgadmin4
environment:
PGADMIN_DEFAULT_EMAIL: example@example.com
PGADMIN_DEFAULT_PASSWORD: MyPasword
PGADMIN_CONFIG_SERVER_MODE: 'False'
volumes:
- pgadmin:/var/lib/pgadmin
ports:
- "5050:80"
volumes:
pgadmin:
对于数据库,我使用绑定卷,但对于面板,我使用普通卷。应用程序工作正常。如果我改变面板容器使用绑定卷,我的docker合成文件看起来像这样
version: '3.7'
services:
PostgresDB:
image: postgres
environment:
- POSTGRES_DB=MyDatabase
- POSTGRES_USER=MyUser
- POSTGRES_PASSWORD=MyPassword
volumes:
- ./data:/var/lib/postgresql/data
ports:
- '5432:5432'
PostgresDBAdmin:
image: dpage/pgadmin4
environment:
PGADMIN_DEFAULT_EMAIL: example@example.com
PGADMIN_DEFAULT_PASSWORD: MyPasword
PGADMIN_CONFIG_SERVER_MODE: 'False'
volumes:
- ./pgadmin:/var/lib/pgadmin
ports:
- "5050:80"
这将导致面板容器由于目录权限问题而失败。生成的错误日志如下所示
PostgresDBAdmin_1 | ERROR : Failed to create the directory /var/lib/pgadmin/sessions:
PostgresDBAdmin_1 | [Errno 13] Permission denied: '/var/lib/pgadmin/sessions'
PostgresDBAdmin_1 | HINT : Create the directory /var/lib/pgadmin/sessions, ensure it is writeable by
PostgresDBAdmin_1 | 'pgadmin', and try again, or, create a config_local.py file
PostgresDBAdmin_1 | and override the SESSION_DB_PATH setting per
PostgresDBAdmin_1 | https://www.pgadmin.org/docs/pgadmin4/6.18/config_py.html
PostgresDBAdmin_1 | Traceback (most recent call last):
PostgresDBAdmin_1 | File "/pgadmin4/pgadmin/setup/data_directory.py", line 82, in create_app_data_directory
PostgresDBAdmin_1 | _create_directory_if_not_exists(config.SESSION_DB_PATH)
PostgresDBAdmin_1 | File "/pgadmin4/pgadmin/setup/data_directory.py", line 20, in _create_directory_if_not_exists
PostgresDBAdmin_1 | os.mkdir(_path)
PostgresDBAdmin_1 | PermissionError: [Errno 13] Permission denied: '/var/lib/pgadmin/sessions'
这种问题很少见,我试着找到一种方法给予访问容器来创建目录,但我没有找到这样做的方法。我希望能够使用绑定卷的原因是因为在像NopCommerce这样的情况下,它使我更容易访问文件来创建主题。
有人能帮我解决这个问题吗?
2条答案
按热度按时间qc6wkl3g1#
pgadmin容器进程在UID为5050的用户下运行。
该用户需要具有主机上
./pgadmin
目录的访问权限。一种方法是使用该UID在主机上创建一个用户,并使其成为有权访问
./pgadmin
目录的组的成员。例如,如果
./pgadmin
归您和您的组所有,而您和您的组都称为“pitaridis”,那么您可以创建一个名为“pgadmin”的用户,如下所示然后容器进程可以访问
./pgadmin
并创建它需要的文件。另一种可能更简单但不太安全的方法是以root身份运行容器,如下所示:
cqoc49vn2#
您必须在PostgreSQL Admin服务中指定
user:root
。Docker合成文件的结果如下所示: