繁体   English   中英

docker 权限问题使用简单的 python 脚本写入 txt 文件

[英]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 来解决此类问题,但是对于这个特定的基本映像,由于您需要追踪一系列依赖关系,最终会有点痛苦:

如果您查看最后一个 Dockerfile,您会发现:

USER $RAY_UID
ENV HOME=/home/ray

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM