gpt4 book ai didi

docker - 如何能够在Docker镜像内的文件中写入?

转载 作者:行者123 更新时间:2023-12-02 21:09:38 25 4
gpt4 key购买 nike

我有一个使用以下Dockerfile创建的docker镜像

FROM ubuntu

RUN useradd -ms /bin/bash seltest
RUN mkdir /home/seltest/output
RUN touch /home/seltest/output/test.out
WORKDIR /home/seltest
RUN chown -R seltest:seltest .
COPY script.sh /home/seltest
USER seltest

CMD ["bash", "script.sh"]

实际上,这将创建一个新用户 seltest,然后执行脚本 script.sh:
echo 'test' > /home/seltest/output/test.out

我使用以下命令创建docker镜像
docker build -f Dockerfile -t testimage  .

并使用以下命令在主机上运行它:
docker run --rm  -it  -v ${PWD}/output:/home/seltest/output testimage

但我得到一个错误
script.sh: line 1: /home/seltest/output/test.out: Permission denied

我事先创建的名为 output的本地文件夹为空。

为什么会出现此错误?如何设置docker用户 seltest可以写入的共享文件夹?我在这里做错了什么?

最佳答案

您从主机操作系统挂载/home/seltest/output/,因此它具有主机操作系统的权限和所有权。使其对所有人都可写,并且容器中不会出现问题:

$ chmod 777 ${PWD}/output
$ docker run --rm -it -v ${PWD}/output:/home/seltest/output testimage

当然,当您以更好的粒度配置写入权限时,更安全的选择将是不全部写入。这可能是一个问题,因为用户 seltest仅存在于容器中。更好的选择是在创建 seltest用户时,如果还定义了用户ID,则将允许在目录 ${PWD}/output级别上对该用户ID进行写访问。

关于docker - 如何能够在Docker镜像内的文件中写入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55515982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com