在构建Docker映像时,如何将文件复制到映像中,以使生成的文件由根用户以外的用户拥有?
当前回答
对于v17.09.0-ce及更新版本
使用可选标志——chown=<user>:<group>,使用ADD或COPY命令。
例如
COPY --chown=<user>:<group> <hostPath> <containerPath>
——chown标志的文档现在在主Dockerfile Reference页面上。
版本34263已经合并,在v17.09.0-ce中可用。
对于v17.09.0-ce之前的版本
Docker不支持除了root用户的COPY。执行COPY命令后需要chown / chmod文件。
示例Dockerfile:
from centos:6
RUN groupadd -r myuser && adduser -r -g myuser myuser
USER myuser
#Install code, configure application, etc...
USER root
COPY run-my-app.sh /usr/local/bin/run-my-app.sh
RUN chown myuser:myuser /usr/local/bin/run-my-app.sh && \
chmod 744 /usr/local/bin/run-my-app.sh
USER myuser
ENTRYPOINT ["/usr/local/bin/run-my-app.sh"]
在v17.09.0-ce之前,COPY命令的Dockerfile Reference说:
所有新创建的文件和目录的UID和GID都是0。
历史 此功能已通过多个GitHub问题跟踪:6119,9943,13600,27303,28499,Issue 30110。
第34263版实现了可选标志功能,第467版更新了文档。
其他回答
对于v17.09.0-ce及更新版本
使用可选标志——chown=<user>:<group>,使用ADD或COPY命令。
例如
COPY --chown=<user>:<group> <hostPath> <containerPath>
——chown标志的文档现在在主Dockerfile Reference页面上。
版本34263已经合并,在v17.09.0-ce中可用。
对于v17.09.0-ce之前的版本
Docker不支持除了root用户的COPY。执行COPY命令后需要chown / chmod文件。
示例Dockerfile:
from centos:6
RUN groupadd -r myuser && adduser -r -g myuser myuser
USER myuser
#Install code, configure application, etc...
USER root
COPY run-my-app.sh /usr/local/bin/run-my-app.sh
RUN chown myuser:myuser /usr/local/bin/run-my-app.sh && \
chmod 744 /usr/local/bin/run-my-app.sh
USER myuser
ENTRYPOINT ["/usr/local/bin/run-my-app.sh"]
在v17.09.0-ce之前,COPY命令的Dockerfile Reference说:
所有新创建的文件和目录的UID和GID都是0。
历史 此功能已通过多个GitHub问题跟踪:6119,9943,13600,27303,28499,Issue 30110。
第34263版实现了可选标志功能,第467版更新了文档。
推荐文章
- 如何从私有docker注册表中删除图像?
- 创建多个标签码头镜像
- Docker -如何将文件从镜像复制到主机?
- 如何防止docker在系统启动时自动启动容器?
- 什么是Docker映像“层”?
- 无法从docker-compose连接到docker
- Docker错误无法删除Docker容器,冲突:无法删除存储库引用
- 如何让容器在Kubernetes上运行?
- 如何备份docker容器的数据卷?
- Docker入口点运行bash脚本被“拒绝权限”
- 我如何复制Docker作为非根?
- 如何禁用容器上的自动重启?
- 如何传递参数到Dockerfile?
- 如何知道docker是否已经登录到docker注册服务器
- 为什么安装了Docker而没有安装Docker Compose?