如何创建非 root 用户以使用 Docker 访问 SSH 命令
how to create a non root user to access SSH commands with Docker
我有一个从 docker 映像部署到 Kubernetes pod 的应用程序。在我的 docker 图像中,我 运行 以下命令
FROM openjdk:17.0.1-slim
USER root
WORKDIR /opt/app
ARG JAR_FILE
ARG INFO_APP_BUILD
RUN apt-get update
RUN apt-get install -y sshpass
RUN apt-get install -y openssh-service
COPY /build/libs/*SNAPSHOT.jar /opt/app/app.jar
ENV INFO_APP_BUILD=${INFO_APP_BUILD}
EXPOSE 8080
CMD java -jar /opt/app/app.jar
部署应用程序时,用户被设置为非 root 用户,超出了我的控制。
现在最重要的是,当我尝试启动 ssh 命令时,我收到一条错误消息 no user exists for uid [random id here]
我的目标是配置 docker 映像以创建用户并授予其使用 SSH 命令的权限。
When the application gets deployed, out of my control, the user gets set to a non root user.
容器内,用户运行 java -jar /opt/app/app.jar
是root,因为USER root
.
在容器之外,在主机上,已部署的应用程序通常(几乎完全)从不 executed/accessed 作为 root
。
但它仍应从容器内向服务器发出 ssh 请求:
- openssh service开始
- 容器 /root/.ssh 有正确的 public/private 密钥
-
~user/.ssh
文件夹,在 Docker 应用程序是 运行 的目标服务器上,其中有 authorized_keys 和 public 一个。
但是如果容器内不存在用户,则需要在docker run
上创建它,如in here:
docker run -it --rm --entrypoint sh "$@" \
-c "[ -x /usr/sbin/useradd ] && useradd -m -u $(id -u) u1 -s /bin/sh || adduser -D -u $(id -u) u1 -s /bin/sh;
exec su - u1"
我有一个从 docker 映像部署到 Kubernetes pod 的应用程序。在我的 docker 图像中,我 运行 以下命令
FROM openjdk:17.0.1-slim
USER root
WORKDIR /opt/app
ARG JAR_FILE
ARG INFO_APP_BUILD
RUN apt-get update
RUN apt-get install -y sshpass
RUN apt-get install -y openssh-service
COPY /build/libs/*SNAPSHOT.jar /opt/app/app.jar
ENV INFO_APP_BUILD=${INFO_APP_BUILD}
EXPOSE 8080
CMD java -jar /opt/app/app.jar
部署应用程序时,用户被设置为非 root 用户,超出了我的控制。
现在最重要的是,当我尝试启动 ssh 命令时,我收到一条错误消息 no user exists for uid [random id here]
我的目标是配置 docker 映像以创建用户并授予其使用 SSH 命令的权限。
When the application gets deployed, out of my control, the user gets set to a non root user.
容器内,用户运行 java -jar /opt/app/app.jar
是root,因为USER root
.
在容器之外,在主机上,已部署的应用程序通常(几乎完全)从不 executed/accessed 作为 root
。
但它仍应从容器内向服务器发出 ssh 请求:
- openssh service开始
- 容器 /root/.ssh 有正确的 public/private 密钥
-
~user/.ssh
文件夹,在 Docker 应用程序是 运行 的目标服务器上,其中有 authorized_keys 和 public 一个。
但是如果容器内不存在用户,则需要在docker run
上创建它,如in here:
docker run -it --rm --entrypoint sh "$@" \
-c "[ -x /usr/sbin/useradd ] && useradd -m -u $(id -u) u1 -s /bin/sh || adduser -D -u $(id -u) u1 -s /bin/sh;
exec su - u1"