40

与えられた:

  • ubuntu:13.10 ベースのコンテナ
  • インストールされた ssh (経由apt-get install ssh)

問題: コンテナーを起動するたびに、手動で sshd を実行する必要がありますservice ssh start

試してみました: update-rc.d ssh defaults、しかし、それは役に立ちません。

質問: コンテナーの開始時に sshd サービスを自動的に開始するようにコンテナーをセットアップする方法を教えてください。

4

9 に答える 9

2

これは私がしたことです:

FROM nginx

# install gosu
# seealso:
# https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
# https://github.com/tianon/gosu/blob/master/INSTALL.md
# https://github.com/tianon/gosu
RUN set -eux; \
    apt-get update; \
    apt-get install -y gosu; \
    rm -rf /var/lib/apt/lists/*; \
# verify that the binary works
    gosu nobody true

ENV myenv='default'

RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd

COPY entrypoint.sh /entrypoint.sh

ENV AIRFLOW_HOME=/usr/local/airflow
RUN mkdir $AIRFLOW_HOME
RUN groupadd --gid 8080 airflow
RUN useradd --uid 8080 --gid 8080 -ms /bin/bash -d $AIRFLOW_HOME airflow
RUN echo 'airflow:mypass' | chpasswd


EXPOSE 22
CMD ["/entrypoint.sh"]

entrypoint.sh 内:

echo "starting ssh as root"
gosu root service ssh start &
#gosu root /usr/sbin/sshd -D &

echo "starting tail user"
exec gosu airflow tail -f /dev/null
于 2020-08-06T15:20:23.343 に答える
-1

最初にコンテナにログインし、/bin/init次のように初期化スクリプトを記述します。

# execute in the container
cat <<EOT >> /bin/init
#!/bin/bash
service ssh start
while true; do sleep 1; done
EOT

次に、rootユーザーが ssh 経由でのログ記録を許可されるようにします。

# execute in the container
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config

コンテナを終了した後、コンテナを新しいイメージにコミットします。

# execute in the server
docker commit <YOUR_CONTAINER> <ANY_REPO>:<ANY_TAG>

これ以降、次のコマンドでコンテナーを実行する限り、ssh サービスが自動的に開始されます。

# execute in the server
docker run -it -d --name <NAME> <REPO>:<TAG> /bin/init
docker exec -it <NAME> /bin/bash

終わり。

于 2021-05-31T04:53:03.440 に答える
-17

phusion/baseimage-docker を使用して、よりエレガントな方法を試すことができます

https://github.com/phusion/baseimage-docker#readme

于 2014-04-10T00:04:19.373 に答える