Как добавить S SH доступ к docker контейнеру - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть следующий DOCKER FILE

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 .

. Он запускает CAMUNDA Workflow Engine с внешней базой данных SQL Paas, и он отлично работает. Однако для устранения неполадок мне нужно иметь возможность S SH в контейнер.

Я нашел на этом сайте, как это сделать: https://docs.microsoft.com/en-us/azure/app-service/containers/tutorial-custom-docker-image

Однако проблема в том, что и ENTRYPOINT, и CMD допускают только ОДНУ команду, поэтому я не уверен, как запустить S SH

# 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

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

Документы по Azure могут быть немного лучше, но вы почти у цели.

Во-первых, поскольку вы используете Alpine Linux, ваши шаги в Dockerfile немного отличаются от их примера. , Примечательно, что вы используете apk add вместо apt-get install. Взгляните на это руководство , в котором есть примеры настройки S SH для Azure с Alpine.

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 имеет несколько репозиториев с полными примерами проектов, включая установку S SH. Вот хороший пример , хотя это Ubuntu, а ваш контейнер Alpine, так что он немного другой.

1 голос
/ 10 февраля 2020

Вот несколько советов:

  • создайте собственный скрипт, который вы будете запускать при запуске контейнера (тег CMD), который запускает демон ssh и другие ваши сервисы
  • (более хакерский) как в этом ответе просто поместите все в свой CMD
...