openssh-server가 Docker 컨테이너에서 시작되지 않았습니다.

openssh-server가 Docker 컨테이너에서 시작되지 않았습니다.

이상한 문제가 있습니다.

IP 주소가 있는 Docker 컨테이너에 SSH로 연결할 수 없습니다 172.17.0.61.

다음 오류가 발생합니다.

$ ssh 172.17.0.61
ssh: connect to host 172.17.0.61 port 22: Connection refused

광산에는 설치 단계가 Dockerfile포함됩니다 .openssh-server

RUN apt-get -y install curl runit openssh-server

SSH를 시작하는 단계도 있습니다.

RUN service ssh start

무엇이 문제일까요?

다음을 사용하여 컨테이너에 들어갈 때nsenterssh서비스를 시작 하면 SSH를 사용할 수 있습니다. 하지만 컨테이너가 생성될 때 시작되지 않는 것 같습니다 ssh-server.

어떻게 해야 합니까?

답변1

컨테이너 및 이미지

RUN문은 Docker 이미지를 빌드할 때 명령을 실행하는 데 사용됩니다. 및 를
사용하면 해당 이미지를 사용하여 컨테이너가 시작될 때 실행할 항목을 정의할 수 있습니다. 바라보다ENTRYPOINTCMD
Dockerfile 참조사용 방법에 대한 지침을 얻으십시오.

제공하다

init-system은 컨테이너에 사전 설치되어 있지 않으므로 service ... start컨테이너에서 사용할 수 없습니다.
문에서 프로세스를 CMD포그라운드 프로세스로 시작하거나 Phusion 또는 Supervisord와 같은 초기화 시스템을 사용하는 것을 고려하세요.

답변2

더 좋은 방법이 있다고 생각합니다.

도커파일

FROM ubuntu:14.04.1
EXPOSE 22
COPY docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh
RUN apt-get install -y openssh-server

ENTRYPOINT ["sh", "/docker-entrypoint.sh"]

# THIS PART WILL BE REPLACED IF YOU PASS SOME OTHER COMMAND TO docker RUN
CMD while true; do echo "default arg" && sleep 1; done

도커-entrypoint.sh

#!/bin/bash
service ssh restart
exec "$@"

빌드 명령 docker build -t sshtest .

이 접근 방식의 이점은 SSH 데몬을 사용할 때 항상 시작된다는 것입니다 docker run. 그러나 다음과 같은 선택적 매개변수를 지정할 수도 있습니다.

docker run sshtestdefault argdocker run sshtest sh -c 'while true; do echo "passed arg" && sleep 3; done'1초마다 인쇄 3초마다 인쇄 할지 여부passed arg

관련 정보