如何创建非 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"