我有以下 Dockerfile:
...
RUN groupadd -r myuser&& useradd -r -g myuser myuser
RUN mkdir /data && chmod a+rwx /data
USER myuser
...
Run Code Online (Sandbox Code Playgroud)
运行图像docker run
工作正常(我的意思是用户在目录myuser
中具有写入权限/data
)。
如果我使用 运行图像docker run -v /host/path:/data
,用户myuser
将无法在目录中写入/data
。
问题:在第二种情况下如何授予用户myuser
在目录中写入的权限?/data
原因是该/host/path
目录属于 root 用户,并且用户myuser
没有在此类目录中写入的权限。
您可以使用与拥有该目录的主机用户 ID 匹配的用户 ID 来运行容器。通常这是当前用户:
docker run -u $(id -u) -v /host/path:/container/path ...
Run Code Online (Sandbox Code Playgroud)
为此,您的图像需要执行以下操作:
/data
目录是一个不错的选择。RUN chown ...
应用程序,只需将COPY
其放入并以 root 身份运行其构建序列。FROM some-base-image
# Do all of the initial setup and build as root
WORKDIR /app
COPY . .
RUN ...
# Create some non-root user that owns the data directory by default
RUN useradd -r myuser # no specific user ID
RUN mkdir /data && chown myuser /data
# VOLUME ["/data"] # optional, the only place VOLUME makes sense at all
# Specify how to run the container
USER myuser # not earlier than this
EXPOSE ... # optional but good practice
ENTRYPOINT ["/entrypoint.sh"] # knows how to seed /data, then `exec "$@"`
CMD my_app ... # a complete command line
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6173 次 |
最近记录: |