当前位置: 首页 > 知识库问答 >
问题:

拒绝Docker写入权限

仉嘉泽
2023-03-14

我试图用docker运行一个简单的命令,读取我的主目录中的文件,并在本地机器上的同一目录中写入输出文件(/home/userxyz/projects/data)。“数据”文件夹属于我(userxyz)和具有R/W权限的同名组(userxyz)。

我用这样的Dockerfile构建了一个图像(下面介绍如何将用户添加到Docker容器?):

FROM osgeo/gdal:alpine-small-latest

RUN mkdir /usr/tmp

RUN addgroup -S userxyz \
  && adduser -S -D -h /usr/tmp userxyz userxyz \
  && chown -R userxyz:userxyz /usr/tmp

USER userxyz

WORKDIR /usr/tmp

以及:

docker build -t userxyz/test .

我运行docker时使用了:

docker run --rm -v /home/userxyz/projects/data:/usr/tmp userxyz/test gdal_translate -ot UInt32 /usr/tmp/input.tif /usr/tmp/output.tif

然而,我仍然得到:

ERROR 4: Attempt to create new tiff file `/usr/tmp/output.tif' failed: Permission denied

当我只读取文件时,它可以工作:

docker run --rm -v /home/userxyz/projects/data:/usr/tmp userxyz/test gdalinfo /usr/tmp/input.tif

知道写入权限有什么问题吗?

编辑:当打开数据文件夹为“其他人”读/写时,文件是由用户正确创建的,所以我猜是用户名属性?如何才能使文件由用户xyz创建,而不是由用户500100创建?


共有2个答案

轩辕风华
2023-03-14

您必须根据组ID而不是组名在组中添加用户。用户名和组名在容器中是隔离的,因此无法工作。

您可以在主机上使用以下命令在文件中找到组ID:

cat /etc/group | grep userxyz

找到后,您将用户添加到Dockerfile中的组:

FROM osgeo/gdal:alpine-small-latest

RUN mkdir /usr/tmp

RUN groupadd -g $GID userxyz \
  && adduser -S -D -h /usr/tmp userxyz userxyz \
  && chown -R userxyz:userxyz /usr/tmp

USER userxyz

WORKDIR /usr/tmp

其中,用组ID替换$GID。

公良渝
2023-03-14

虽然你设置了同一个用户

因此,仅复制用户名是不够的,还需要复制UID、GID,例如next:

Dockerfile:

FROM ubuntu:16.04

ARG UID
ARG GID

RUN groupadd -g $GID userxyz
RUN useradd -m -u $UID -g $GID -s /bin/bash userxyz

生成命令:

docker build -t abc:1 --build-arg UID=`id userxyz -u` --build-arg GID=`id userxyz -g` .

解释:

id userxyz-u

 类似资料:
  • 同时运行docker的服务 YML文件: DockerFile: 来自rabbitmq:3-management-alpine 抄袭/配置/ampq/devhost 我使用了这个命令:docker-compose-fdocker-compose.yml--build ampq 请帮我解决这个问题

  • 我试图在android中写入文件,但一直出现以下错误: java.io.FileNotFoundException: /storage/emulated/0/Notes/TestFile.txt(权限拒绝) 搜索此网站可以简单地解决此问题,即向应用程序清单文件添加WRITE\u EXTERNAL\u存储,但这对我不起作用。我一直在犯同样的错误。

  • Docker安装在AWS EC2 Ubuntu 16.04实例上,如下所示: 引发权限被拒绝错误: 尝试连接到处的Docker守护程序套接字时,权限被拒绝unix:///var/run/docker.sock: 收到http:///var/run/docker.sock/v1.39/info: 拨号unix/var/run/docker.sock:connect:权限被拒绝 显示: uname-a

  • 我试图在PHP中运行exec()函数,但是我得到了一个'Permission Denied'输出。PHP是作为Docker容器安装的。我在Raspberry PI和我的MacBook上都得到了这个。 作为一个测试,我在没有Docker的情况下安装了LAMP,它工作得很好,但在Docker上就不行了。 例如,当我运行 我在浏览器中的PHP脚本中获得以下信息: 而且运行exec()函数还是像shell

  • 问题内容: 我正在尝试使用Python在Windows OS上创建并写入一个临时文件。我已经使用Python模块创建了一个临时文件。 但是当我去写那个临时文件的时候我得到了一个错误。我不可以写临时文件吗?难道我做错了什么?如果要创建并写入临时文件,应该如何在Python中进行操作?为了安全起见,我想在temp目录中创建一个临时文件,而不是在本地(在.exe正在执行的目录中)中创建一个临时文件。 问

  • 我正在尝试使用相机并保存图像。按照Commonware建议的步骤进行操作。我经常出错- 2018-11-12 02:10:54.588 3145-3173/inder.execE/Database aseUtils:写入异常到包裹inder.java:682安全异常:权限拒绝:写入android.support.v4.content.FileProvider uricontent://com.bi