【问题标题】:How to add SSH access to a docker container如何向 docker 容器添加 SSH 访问权限
【发布时间】:2020-05-25 19:32:56
【问题描述】:

我有以下 DOCKER 文件

FROM alpine:3.10 as builder

ARG VERSION=7.12.0
ARG DISTRO=tomcat
ARG SNAPSHOT=true

ARG EE=false
ARG USER
ARG PASSWORD

RUN apk add --no-cache \
        ca-certificates \
        maven \
        tar \
        wget \
        xmlstarlet

COPY settings.xml download.sh camunda-tomcat.sh camunda-wildfly.sh  /tmp/

RUN /tmp/download.sh

#Enable Basic AUTH
COPY web.xml /camunda/webapps/engine-rest/WEB-INF/web.xml 

##### FINAL IMAGE #####

FROM alpine:3.10

ARG VERSION=7.12.0



ENV CAMUNDA_VERSION=${VERSION}
ENV DB_DRIVER=com.microsoft.sqlserver.jdbc.SQLServerDriver
ENV DB_URL=xx
ENV DB_USERNAME=dbname@xx
ENV DB_PASSWORD=xx
ENV DB_CONN_MAXACTIVE=20
ENV DB_CONN_MINIDLE=5
ENV DB_CONN_MAXIDLE=20
ENV DB_VALIDATE_ON_BORROW=true
ENV DB_VALIDATION_QUERY="SELECT 1"
ENV SKIP_DB_CONFIG=
ENV WAIT_FOR=
ENV WAIT_FOR_TIMEOUT=120
ENV TZ=UTC
ENV DEBUG=TRUE
ENV JAVA_OPTS="-Xmx768m -XX:MaxMetaspaceSize=256m"

EXPOSE 8080 8000

# Downgrading wait-for-it is necessary until this PR is merged
# https://github.com/vishnubob/wait-for-it/pull/68
RUN apk add --no-cache \
        bash \
        ca-certificates \
        openjdk11-jre-headless \
        tzdata \
        tini \
        xmlstarlet \
    && wget -O  /usr/local/bin/wait-for-it.sh \
      "https://raw.githubusercontent.com/vishnubob/wait-for-it/a454892f3c2ebbc22bd15e446415b8fcb7c1cfa4/wait-for-it.sh" --no-check-certificate \
    && chmod +x /usr/local/bin/wait-for-it.sh

RUN addgroup -g 1000 -S camunda && \
    adduser -u 1000 -S camunda -G camunda -h /camunda -s /bin/bash -D camunda
WORKDIR /camunda
USER camunda

#MSSQL SERVER JDBC DRIVER INSTALL
COPY mssql-jdbc-7.2.2.jre11.jar /camunda/lib/

ENTRYPOINT ["/sbin/tini", "--"]
CMD ["./camunda.sh"]

COPY --chown=camunda:camunda --from=builder /camunda .

这运行带有外部 SQL Paas 数据库的 CAMUNDA 工作流引擎,并且运行良好。 但是,为了排除故障,我需要能够通过 SSH 连接到容器。

我在这个网站上找到了如何做到这一点: https://docs.microsoft.com/en-us/azure/app-service/containers/tutorial-custom-docker-image

但问题是 ENTRYPOINT 和 CMD 都只允许一个命令,所以我不知道如何启动 SSH

# ssh
ENV SSH_PASSWD "root:xyz"
RUN apt-get update \
        && apt-get install -y --no-install-recommends dialog \
        && apt-get update \
    && apt-get install -y --no-install-recommends openssh-server \
    && echo "$SSH_PASSWD" | chpasswd 

COPY sshd_config /etc/ssh/
COPY init.sh /usr/local/bin/
RUN chmod u+x /usr/local/bin/init.sh

EXPOSE 8000 2222

# end ssh config

【问题讨论】:

  • 您是否考虑过 ssh-ing 到主机,然后使用 docker exec -it <your_container_id> /bin/bash 在容器中创建一个 shell,而不是?那会解决你的问题吗?否则,请参阅this doc page,它建议使用自定义脚本作为 CMD
  • 这是在 Azure web app linux 容器中运行的,我没有办法这样做
  • 无论如何你需要 ssh 到容器中做什么?你可以从 maven alpine 图像开始

标签: linux docker ssh


【解决方案1】:

有关这方面的 Azure 文档可能会好一些,但您就快到了。

首先,由于您使用的是 Alpine Linux,因此您的 Dockerfile 步骤与他们的示例有些不同。值得注意的是,您使用apk add 而不是apt-get install。查看this guide,其中包含使用 Alpine 为 Azure 设置 SSH 的示例。

RUN apk add openssh \
  && echo "root:Docker!" | chpasswd
COPY ./path/to/sshd_config /etc/ssh/

sshd_config 应该如下所示:

Port                    2222
ListenAddress           0.0.0.0
LoginGraceTime          180
X11Forwarding           yes
Ciphers                 aes128-cbc,3des-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr
MACs                    hmac-sha1,hmac-sha1-96
StrictModes             yes
SyslogFacility          DAEMON
PasswordAuthentication  yes
PermitEmptyPasswords    no
PermitRootLogin         yes
Subsystem               sftp internal-sftp
PidFile                 /etc/ssh/run/sshd.pid
HostKey                 /etc/ssh/ssh_host_rsa_key

最后一步是确保sshd 在容器启动时启动。虽然CMD 只能接受一个命令是对的,但该命令可以是一个运行多个东西的脚本。默认情况下,sshd 派生一个后台进程,而不是在前台运行,所以你应该没问题。例如,您的启动命令可能如下所示:

#!/bin/sh

# ...

# Start sshd for Azure
ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -t rsa
mkdir -p /etc/ssh/run
/usr/sbin/sshd

# Run any additional commands like ./camunda.sh

Azure 有一些包含完整示例项目的存储库,包括 SSH 设置。这是一个good example,尽管它是 Ubuntu 并且您的容器是 Alpine,所以它有点不同。

【讨论】:

    【解决方案2】:

    以下是一些建议:

    • 创建一个您将在容器启动时运行的自定义脚本(CMD 标签),用于启动 ssh 守护进程和您的其他服务
    • (更骇人听闻)like in this answer 只需将所有内容都放入您的CMD

    【讨论】:

      猜你喜欢
      • 2017-10-04
      • 2021-08-19
      • 2018-04-28
      • 2018-04-17
      • 1970-01-01
      • 1970-01-01
      • 2020-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多