이상한 문제가 있습니다.
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
무엇이 문제일까요?
다음을 사용하여 컨테이너에 들어갈 때nsenter
ssh
서비스를 시작 하면 SSH를 사용할 수 있습니다. 하지만 컨테이너가 생성될 때 시작되지 않는 것 같습니다 ssh-server
.
어떻게 해야 합니까?
답변1
컨테이너 및 이미지
이 RUN
문은 Docker 이미지를 빌드할 때 명령을 실행하는 데 사용됩니다. 및 를
사용하면 해당 이미지를 사용하여 컨테이너가 시작될 때 실행할 항목을 정의할 수 있습니다. 바라보다ENTRYPOINT
CMD
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 sshtest
default arg
docker run sshtest sh -c 'while true; do echo "passed arg" && sleep 3; done'
1초마다 인쇄 3초마다 인쇄 할지 여부passed arg