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 指令详解
2724 0
|
缓存 Linux Docker
44-Dockerfile-ADD/COPY指令
44-Dockerfile-ADD/COPY指令
|
Shell 开发工具 git
43-Dockerfile-FROM/LABEL/RUN指令
43-Dockerfile-FROM/LABEL/RUN指令
|
Docker 容器
Dockerfile文件中CMD指令与ENTRYPOINT指令的区别
本文是博主学习docker 制作镜像指令的记录,希望对大家有所帮助
181 0
Dockerfile文件中CMD指令与ENTRYPOINT指令的区别
|
缓存 Linux Go
Dockerfile(10) - ADD 指令详解
Dockerfile(10) - ADD 指令详解
2101 0
|
应用服务中间件 Shell nginx
Dockerfile(7) - ENV 指令详解
Dockerfile(7) - ENV 指令详解
2026 0
Dockerfile(7) - ENV 指令详解
|
Shell Docker Windows
Dockerfile(8) - USER 指令详解
Dockerfile(8) - USER 指令详解
815 0
|
安全 Shell Linux
DOCKER04_详解Dockerfile基本指令、FROM、LABEL、RUN、CMD、ENTRYPOINT、ARG、ENV、VOLUME、USER(二)
③. 保留字指令 ①. FROM 基于哪个镜像 ②. LABEL 镜像的说明信息
193 0
DOCKER04_详解Dockerfile基本指令、FROM、LABEL、RUN、CMD、ENTRYPOINT、ARG、ENV、VOLUME、USER(二)
|
Shell 容器
DOCKER04_详解Dockerfile基本指令、FROM、LABEL、RUN、CMD、ENTRYPOINT、ARG、ENV、VOLUME、USER(三)
③. RUN 构建时期运行的指令 ④. CMD(运行时期)、ENTRYPOINT 指定启动容器、镜像的默认入口
180 0
DOCKER04_详解Dockerfile基本指令、FROM、LABEL、RUN、CMD、ENTRYPOINT、ARG、ENV、VOLUME、USER(三)