怎么修改容器内下载的文件所属用户

2022-08-18 17:37:16 +08:00
 SSQQ
FROM openjdk:17.0.2-jdk-oracle
EXPOSE 8083
ARG JAR_FILE
VOLUME ["/data"]
VOLUME ["/config"]
ADD ./sp-0.0.1-SNAPSHOT.jar  /app.jar
ENTRYPOINT ["java", "-jar","/app.jar"]

这个是个文件下载工具 下载出来的文件想给指定的用户权限

我看别人的 docker 运行时候 添 UID 和 GID 就可以这个是怎么实现的呢

就像这样 docker run -d -e Gid=100 -e UID=100 ....... 像弄成这样的 那位兄弟会的给说说

1031 次点击
所在节点    Docker
6 条回复
Maxwe11
2022-08-18 17:41:28 +08:00
没搞过,直接 docker exec bash 对文件赋权呢?
AoEiuV020CN
2022-08-18 17:45:25 +08:00
dockerfile 有 USER 命令可以指定用于执行后续命令的用户,
但指定的是 docker 镜像中的用户,不存在的话首先要 useradd ,
应该是没有特别容易的方法直接指定 uid,
只是下载一个文件或者一个目录的话考虑下载之后 chmod ,
AoEiuV020CN
2022-08-18 17:47:05 +08:00
搜了个大概可行的代码,总之就是先添加用户再指定用户,具体 id 走参数传入,
https://stackoverflow.com/a/44683248

FROM ubuntu:xenial-20170214
ARG UNAME=testuser
ARG UID=1000
ARG GID=1000
RUN groupadd -g $GID -o $UNAME
RUN useradd -m -u $UID -g $GID -o -s /bin/bash $UNAME
USER $UNAME
CMD /bin/bash

docker build --build-arg UID=$(id -u) --build-arg GID=$(id -g) \
-f bb.dockerfile -t testimg .
lovelylain
2022-08-18 18:48:42 +08:00
@AoEiuV020CN 要是容器内只有一个 go 程序没有 useradd 命令呢,怎么以非 root 用户运行?
julyclyde
2022-08-19 09:15:10 +08:00
@jobmailcn 里面只有一个 go 程序,还有所谓 root 吗?你连 docker exec 都执行不了吧
ragnaroks
2022-08-22 08:59:04 +08:00
PGID PUID 是配合 supervisor 使用的,参考 https://hub.docker.com/r/linuxserver/qbittorrent ,对于自己创建的镜像,最简单的办法是指定此容器用户

FROM openjdk:17.0.2-jdk-oracle
EXPOSE 8083
ARG JAR_FILE
VOLUME ["/data"]
VOLUME ["/config"]
ADD ./sp-0.0.1-SNAPSHOT.jar /app.jar
USER user1
ENTRYPOINT ["java", "-jar","/app.jar"]

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/873800

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX