在 docker-compose 期间尝试访问容器中的文件时权限被拒绝(UBUNTU 20.04)

Posted

技术标签:

【中文标题】在 docker-compose 期间尝试访问容器中的文件时权限被拒绝(UBUNTU 20.04)【英文标题】:Permission denied while trying to access files in container during docker-compose(UBUNTU 20.04) 【发布时间】:2021-08-23 16:55:14 【问题描述】:

我正在尝试一个涉及使用 rasa 的项目,当我运行 sudo docker-compose up 时,我收到以下错误。

Starting ask-my-doctor_rasa_1  ... done
Attaching to ask-my-doctor_ngrok_1, ask-my-doctor_rasa_1
rasa_1   | bash: line 15: /app/credentials.yml: Permission denied
rasa_1   | bash: line 16: /app/train_logs.txt: Permission denied
rasa_1   | bash: line 17: /app/run_actions_logs.txt: Permission denied
rasa_1   | 2021-06-07 14:02:52 DEBUG    rasa.telemetry  - Could not read telemetry settings from configuration file: Configuration 'metrics' key not found.
rasa_1   | 2021-06-07 14:02:52 WARNING  rasa.utils.common  - Failed to write global config. Error: [Errno 13] Permission denied: '/.config'. Skipping.
rasa_1   | 2021-06-07 14:02:53 DEBUG    rasa.cli.run  - 'models' not found. Using default location 'models' instead.
rasa_1   | Traceback (most recent call last):
rasa_1   |   File "/opt/venv/bin/rasa", line 8, in <module>
rasa_1   |     sys.exit(main())
rasa_1   |   File "/opt/venv/lib/python3.8/site-packages/rasa/__main__.py", line 117, in main
rasa_1   |     cmdline_arguments.func(cmdline_arguments)
rasa_1   |   File "/opt/venv/lib/python3.8/site-packages/rasa/cli/run.py", line 118, in run
rasa_1   |     args.model = _validate_model_path(args.model, "model", DEFAULT_MODELS_PATH)
rasa_1   |   File "/opt/venv/lib/python3.8/site-packages/rasa/cli/run.py", line 71, in _validate_model_path
rasa_1   |     os.makedirs(default, exist_ok=True)
rasa_1   |   File "/usr/lib/python3.8/os.py", line 223, in makedirs
rasa_1   |     mkdir(name, mode)
rasa_1   | PermissionError: [Errno 13] Permission denied: 'models'
ask-my-doctor_rasa_1 exited with code 1

我还尝试让容器保持运行,并尝试登录并创建一个文件来检查,在那里我也收到“权限被拒绝”消息。

如何解决这个权限问题?

任何帮助将不胜感激。

【问题讨论】:

请把 docker-compose 文件和 dockerfile 发给你。 错误也需要直接包含在问题中(不是链接后面)和文本(不是图像)。 当然@DavidMaze 会做 【参考方案1】:

使用 docker-compose 方法运行 Rasa 时,容器中会挂载多个文件夹。

我怀疑挂载目录的组和权限不正确。

你能试试这个吗:

# Go to root folder of your deployment folder.
# Default is /etc/rasa, but from your error image, I see it is different.
cd ~/Project/ask-my-doctor

# Set group & permissions for everything in that folder
sudo chgrp -R root * && sudo chmod -R 770 *

# Correct group & permissions for the database
sudo chown -R 1001 db && sudo chmod -R 750 /db

可以在rasa docs 中找到这些步骤的详细说明,适用于 Linux/macOS 用户:

Rasa 容器遵循 Docker 的最佳实践,并且不以 root 用户身份运行。因此,请确保root 组对以下目录及其内容具有读写权限:

/etc/rasa/credentials.yml /etc/rasa/endpoints.yml /etc/rasa/environments.yml /etc/rasa/auth /etc/rasa/certs /etc/rasa/凭据 /etc/rasa/models /etc/rasa/logs

要为/etc/rasa 中的所有内容设置权限和组,您可以使用此命令,但请确保为/etc/rasa/db 目录更正它,如下一步所述:

sudo chgrp -R root /etc/rasa/* && sudo chmod -R 770 /etc/rasa/*

如果您要挂载不同或额外的目录,请相应地调整其权限。

Postgres 数据库存储 配置持久 Postgres 数据库存储

在 Linux 上,本地目录用于持久性 Postgres 数据库存储。 您必须使用以下命令设置数据库持久性目录的正确所有者和权限:

sudo chown -R 1001 /etc/rasa/db && sudo chmod -R 750 /etc/rasa/db

【讨论】:

这就像一个魅力。我不知道如何授予必要的权限。感谢您的帮助。 @Nikhilv.h。您可以将其标记为已接受的答案吗?顺便说一句,好问题。

以上是关于在 docker-compose 期间尝试访问容器中的文件时权限被拒绝(UBUNTU 20.04)的主要内容,如果未能解决你的问题,请参考以下文章

Docker:在 Tomcat 镜像构建期间访问 MySQL 容器

docker-compose mysql 容器拒绝访问 wordpress 容器

构建 docker-compose 镜像并将其推送到容器注册表中

无法使用nginx-proxy和dnsmasq在带有docker-compose的容器之间访问虚拟主机

使用docker-compose时无法访问docker容器内的spring-boot rest-endpoint

连接到 docker-compose mysql 容器会拒绝访问,但运行相同映像的 docker 不会