为什么无法通过 docker-compose 将文件挂载到容器上?
Why is File Mounted on Container via docker-compose not Accessible?
在我的 docker-compose 文件中,我尝试将文件从主机挂载到 docker 容器中。
docker-compose 文件我有这样的东西:
version "2"
services:
myservice:
image: images/previmage:1.0.0
volumes:
- /opt/files/aaa.conf:/aaa.conf
服务启动后,我在宿主机上使用docker查看容器根目录下的内容:
sudo docker container exec myservice_1 ls /
aaa.conf 条目的 ls 命令的结果显示它看起来在那里,但权限不是我期望的:
drwxr-xr-x. 2 root root 6 Apr 11 2018 opt
-?????????? ? ? ? ? ? aaa.conf
ls: cannot access /aaa.conf: Permission denied
同样,如果我尝试 'cat aaa.conf' 等其他命令,我会得到权限被拒绝的消息。
我了解需要在主机端设置该文件的权限。
在主机上,我同时设置了权限 755 和 777,但我仍然遇到权限被拒绝的情况。
这是预期的行为吗?
编辑 [运行 AWS/EC2]
sudo docker container exec myservice_1 cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
sudo docker container exec myservice_1 id -u
33016
我遇到了同样的问题,它适用于 SELinux (Check this post)
为特定容器禁用 SELinux
您可以通过将 --security-opt label:disable
添加到您的 docker run
命令来禁用特定容器的 SELinux:
docker container run --security-opt label:disable myservice_1
添加 SELinux 规则(推荐)
根据this post,您还可以使用此命令启用对文件的访问
chcon -Rt svirt_sandbox_file_t /path/to/volume
完全禁用 SELinux!
不推荐,但也有效:
su -c "setenforce 0"
在我的 docker-compose 文件中,我尝试将文件从主机挂载到 docker 容器中。
docker-compose 文件我有这样的东西:
version "2"
services:
myservice:
image: images/previmage:1.0.0
volumes:
- /opt/files/aaa.conf:/aaa.conf
服务启动后,我在宿主机上使用docker查看容器根目录下的内容:
sudo docker container exec myservice_1 ls /
aaa.conf 条目的 ls 命令的结果显示它看起来在那里,但权限不是我期望的:
drwxr-xr-x. 2 root root 6 Apr 11 2018 opt
-?????????? ? ? ? ? ? aaa.conf
ls: cannot access /aaa.conf: Permission denied
同样,如果我尝试 'cat aaa.conf' 等其他命令,我会得到权限被拒绝的消息。
我了解需要在主机端设置该文件的权限。 在主机上,我同时设置了权限 755 和 777,但我仍然遇到权限被拒绝的情况。
这是预期的行为吗?
编辑 [运行 AWS/EC2]
sudo docker container exec myservice_1 cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
sudo docker container exec myservice_1 id -u
33016
我遇到了同样的问题,它适用于 SELinux (Check this post)
为特定容器禁用 SELinux
您可以通过将 --security-opt label:disable
添加到您的 docker run
命令来禁用特定容器的 SELinux:
docker container run --security-opt label:disable myservice_1
添加 SELinux 规则(推荐)
根据this post,您还可以使用此命令启用对文件的访问
chcon -Rt svirt_sandbox_file_t /path/to/volume
完全禁用 SELinux!
不推荐,但也有效:
su -c "setenforce 0"