46-Dockerfile-USER/WORKDIR指令

简介: 46-Dockerfile-USER/WORKDIR指令

前言

  • 本篇来学习下Dockerfile中的USER/WORKDIR指令

USER

作用

  • 指定运行容器时的用户名或 UID,后续的RUN等指令也会使用指定的用户身份

说明:

  1. USER 只是帮助我们切换到指定的用户而已,这个用户必须事先建立好的,否则无法切换
  2. USER 改变之后层的执行 RUN 、CMD 、以及 ENTRYPOINT 这类命令的身份

格式

USER <user>[:<group>]
USER <UID>[:<GID>]

使用示例

  • 新建test.txt
echo test > test.txt
  • 新建dockerfile
FROM alpine
LABEL maintainer="大海"
# 创建用户和组
RUN addgroup -S test && adduser -S test -G test -h /home/test
# USER 只是帮准我们切换到指定的用户而已,这个用户必须事先建立好的,否则无法切换
USER test:test
# 拷贝文件
COPY *.txt /test/
# 一旦声明了 USER 之后,USER 后面的 RUN、CMD、ENTRYPOINT 的身份就是 test ,而 test.txt 是主机生成的,身份是 root ,必然会报错,权限不对。
RUN cd /test && ls -l && echo 1111 > test.txt
  • 运行查看效果
docker build -t test --force-rm --no-cache .

  • 修改dockerfile
  • chown 修改文件权限
FROM alpine
LABEL maintainer="大海"
# 创建用户和组
RUN addgroup -S test && adduser -S test -G test -h /home/test
# USER 只是帮准我们切换到指定的用户而已,这个用户必须事先建立好的,否则无法切换
USER test:test
# 拷贝文件 chown 改变复制文件的权限
COPY --chown=test:test  *.txt /test/
# 一旦声明了 USER 之后,USER 后面的 RUN、CMD、ENTRYPOINT 的身份就是 test ,而 test.txt 是主机生成的,身份是 root ,必然会报错,权限不对。
RUN cd /test && ls -l && echo 1111 > test.txt
  • 运行查看效果

WORKDIR

作用

  • 为 Dockerfile 中跟随它后面的 RUN 、CMD 、ENTRYPOINT、 COPY、ADD 指令设置工作目录

格式

WORKDIR /a/b/c

说明

  1. 在 WORKDIR 中需要使用绝对路径,如果镜像中对应的路径不存在,会自动创建此目录
  2. 一般用 WORKDIR 来替代 RUN cd && 切换目录进行操作的指令
  3. 如果提供了相对路径,则它将相对于上一个 WORKDIR 指令的路径,如:
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
# 效果:/a/b/c

使用示例

  • 新建dockerfile
FROM alpine
RUN pwd && ls -l
WORKDIR /app
RUN pwd && ls -l
COPY *.txt .
RUN ls -l
  • 运行查看效果
docker build -t test --force-rm --no-cache .


相关文章
|
缓存 Linux Go
Dockerfile(11) - COPY 指令详解
Dockerfile(11) - COPY 指令详解
2847 0
|
缓存 Linux Docker
44-Dockerfile-ADD/COPY指令
44-Dockerfile-ADD/COPY指令
|
7月前
|
JSON 物联网 Shell
Dockerfile指令详解
Dockerfile指令详解
135 0
Dockerfile(3) - WORKDIR 指令详解
Dockerfile(3) - WORKDIR 指令详解
1053 0
|
Shell 开发工具 git
43-Dockerfile-FROM/LABEL/RUN指令
43-Dockerfile-FROM/LABEL/RUN指令
|
Docker 容器
Dockerfile文件中CMD指令与ENTRYPOINT指令的区别
本文是博主学习docker 制作镜像指令的记录,希望对大家有所帮助
199 0
Dockerfile文件中CMD指令与ENTRYPOINT指令的区别
|
缓存 Linux Go
Dockerfile(10) - ADD 指令详解
Dockerfile(10) - ADD 指令详解
2383 0
Dockerfile(1) - FROM 指令详解
Dockerfile(1) - FROM 指令详解
609 0
|
存储 应用服务中间件 调度
Dockerfile(12) - HEALTHCHECK 指令详解
Dockerfile(12) - HEALTHCHECK 指令详解
419 0
Dockerfile(12) - HEALTHCHECK 指令详解
|
Linux Shell 应用服务中间件
Dockerfile指令详解(六)
dockfile详细配置 1.dockerfile主要组成部分 基础镜像信息 FROM centos:6.9 制作镜像操作指令 RUN yum -y install openssh-server 容器启动时操作指令 CMD ["/bin/bash"]
511 0
Dockerfile指令详解(六)