簡體   English   中英

為什么無法通過 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 的(查看這篇文章

為特定容器禁用 SELinux

您可以通過在--security-opt label:disable docker run命令中添加--security-opt label:disable--security-opt label:disable特定容器的 SELinux:

docker container run --security-opt label:disable myservice_1

添加 SELinux 規則(推薦)

根據這篇文章,您還可以使用此命令來啟用對文件的訪問

chcon -Rt svirt_sandbox_file_t /path/to/volume

徹底禁用 SELinux!

不推薦,但也有效:

su -c "setenforce 0"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM