无法在 docker [Errno 13] Permission denied 中使用解释器运行 python 脚本

Posted

技术标签:

【中文标题】无法在 docker [Errno 13] Permission denied 中使用解释器运行 python 脚本【英文标题】:Can't run python script with interpreter inside docker [Errno 13] Permission denied 【发布时间】:2017-07-31 17:51:19 【问题描述】:

我是 docker 的新手,我尝试用一​​些模块隔离我的 python 解释器,但我一开始就卡住了。

我创建了一个简单的脚本,例如:

print "Hello world"

保存在/home/my_user/script.py

比跑 docker run -it --rm --name my-first-python-script -v /home/my_user:/home/my_user python:2 python /home/my_user/script.py

然后得到

python: can't open file '/home/my_user/script.py': [Errno 13] Permission denied

如何以正确的权限运行它?

Docker 版本 1.10.3,构建 e03ddb8/1.10.3

操作系统是 Fedora 23(工作站版)

看起来像它的 selinux 故障。目前,我仍然不知道如何解决这个问题。

SELinux is preventing python from read access on the file h.py.

*****  Plugin catchall (100. confidence) suggests   **************************

If you believe that python should be allowed read access on the h.py file by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# ausearch -c 'python' --raw | audit2allow -M my-python
# semodule -X 300 -i my-python.pp

Additional Information:
Source Context                system_u:system_r:container_t:s0:c364,c980
Target Context                unconfined_u:object_r:user_home_t:s0
Target Objects                h.py [ file ]
Source                        python
Source Path                   python
Port                          <Unknown>
Host                          densolovev
Source RPM Packages           
Target RPM Packages           
Policy RPM                    selinux-policy-3.13.1-224.fc25.noarch
Selinux Enabled               True
Policy Type                   targeted
Enforcing Mode                Enforcing
Host Name                     densolovev
Platform                      Linux densolovev 4.8.6-300.fc25.x86_64 #1 SMP Tue
                              Nov 1 12:36:38 UTC 2016 x86_64 x86_64
Alert Count                   1
First Seen                    2017-03-11 20:59:09 +07
Last Seen                     2017-03-11 20:59:09 +07
Local ID                      4cfe1e00-555b-4294-aa88-e057cf831959

Raw Audit Messages
type=AVC msg=audit(1489240749.667:329): avc:  denied   read  for  pid=4951 comm="python" name="h.py" dev="dm-2" ino=2102911 scontext=system_u:system_r:container_t:s0:c364,c980 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=0


Hash: python,container_t,user_home_t,file,read

【问题讨论】:

您的主机上的文件/home/my_user/script.py 的权限是什么?我尝试执行位于已安装卷中的 python 脚本并且没有问题。 docker 容器中运行的是什么 uid?它是否对已安装的卷(您的主目录)具有读取权限? -rw-rw-r-- 。我也尝试在root用户下使用。我将其更改为 -rwxrwxrwx 它没有帮助 【参考方案1】:

将所有者的文件夹更改为您的用户和组。

chown user:user folder

【讨论】:

【参考方案2】:

这就是答案。使用 :Z 参数挂载。

-v /home/my_user:/home/my_user:Z

在这里找到

https://***.com/a/31334443/7682723

【讨论】:

以上是关于无法在 docker [Errno 13] Permission denied 中使用解释器运行 python 脚本的主要内容,如果未能解决你的问题,请参考以下文章

无法在 CentOS 上运行的 Docker 容器中使用 yum

ValueError:无法配置处理程序“文件”:[Errno 13] 权限被拒绝:

使用 PowerShell 调用服务器以运行 python 脚本:无法打开文件 [Errno 13] 权限被拒绝

错误:由于环境错误而无法安装软件包:[Errno 13] 权限被拒绝:我如何解决? [关闭]

如何修复错误无法打开文件,路径 = '/storage/emulated/0/DCIM/Camera/20200818_123041.jpg'(操作系统错误:权限被拒绝,errno = 13)

MySQL:删除数据库时出错(errno 13;errno 17;errno 39)