[英]docker permissions issue writing to txt file with simple python script
为什么我需要权限才能写入 txt 文件? 我该如何解决这个问题
主文件
text_file = open("sample.txt", "w")
n = text_file.write('some words dzfsadfadfs')
text_file.close()
Dockerfile
FROM rayproject/ray
ADD main.py .
CMD ["python", "main.py"]
错误
Traceback (most recent call last):
File "main.py", line 3, in <module>
text_file = open("sample.txt", "w")
PermissionError: [Errno 13] Permission denied: 'sample.txt'
问题是您正在使用的基本映像 ( rayproject/ray
) 配置为以非 root 用户 ( ray
) 身份运行,但将工作目录设置为/
。 有一个可写目录/home/ray
可用; 最简单的解决方案可能是在 Dockerfile 中添加适当的WORKDIR
指令:
FROM rayproject/ray
WORKDIR /home/ray
ADD main.py .
CMD ["python", "main.py"]
更新
我通过首先生成 shell 并检查进程运行的 uid 来解决这个问题:
$ docker run -it --rm testimage bash
(base) ray@bca6b7788820:~$ id
uid=1000(ray) gid=100(users) groups=100(users),27(sudo)
我检查了passwd
文件以获取有关该用户的信息:
(base) ray@bca6b7788820:~$ grep ray /etc/passwd
ray:x:1000:100::/home/ray:/bin/bash
并验证该目录是可写的:
(base) ray@bca6b7788820:~$ cd /home/ray
(base) ray@bca6b7788820:~$ touch foo
通常,您还可以通过检查相应的 Dockerfile 来解决此类问题,但是对于这个特定的基本映像,由于您需要追踪一系列依赖关系,最终会有点痛苦:
rayproject/ray
, Dockerfile 在这里。rayproject/ray-deps
rayproject/base-deps
如果您查看最后一个 Dockerfile,您会发现:
USER $RAY_UID
ENV HOME=/home/ray
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.