아래의 도커 파일로 도커 이미지를 만들고 있는데 기본 이미지에 이미 tomcat이 설치되어 있습니다. 나는이 컨테이너를 실행하려고하면 Tomcat 서비스가 중지되었을 때 Docker가 컨테이너 내부의 포트를 해제하지 않습니다.
#RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:temp1234' | chpasswd
RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# SSH login fix. Otherwise user is kicked off after login
RUN sed '[email protected]\s*required\s*[email protected] optional [email protected]' -i /etc/pam.d/sshd
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
EXPOSE 22
EXPOSE 80
EXPOSE 443
CMD ["/usr/sbin/sshd", "-D"]
CMD service tomcat7 start && tail -f /var/lib/tomcat7/logs/catalina.out
그러나 그것은 이미 사용중인 컨테이너 내부의되어 발견 포트 확인에 아래 오류
[email protected]:~/docker-work$ sudo docker run -p 2222:22 -p 443:443 -p 80:80 d7d7f93692d7
* Starting Tomcat servlet engine tomcat7
...fail!
실패합니다.
[email protected]:/var/log/tomcat7# sudo netstat -plntu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1/sshd
tcp6 0 0 :::1024 :::* LISTEN -
tcp6 0 0 :::44546 :::* LISTEN -
tcp6 0 0 127.0.0.1:8005 :::* LISTEN -
tcp6 0 0 :::47342 :::* LISTEN -
tcp6 0 0 :::80 :::* LISTEN -
tcp6 0 0 :::22 :::* LISTEN 1/sshd
tcp6 0 0 :::443 :::* LISTEN -
이 포트가 어떻게 사용되고 있는지 잘 모르겠습니다.
컨테이너 안에도 톰캣의 서비스를 다시 시작할 수 없습니다. 포트 바인딩 예외로 인해 실패합니다.
나는 P-ID를 죽이고 Tomcat 서비스를 시작하지만 netstat 출력이 프로세스의 P-ID를 제공하지 않는다고 생각했습니다. 친절
나는이 컨테이너에 바람둥이 서비스를 시작할 수있는 방법을 제안는
1) netstat은 Dockerfile과 마찬가지로 컨테이너에 의해 노출 된 포트이기 때문에 22, 80 및 443을 나열합니다. 2) 원본 이미지가 Tomcat 자체를 시작하는 진입 점이 아닌지 확인하십시오. 3) 로그 파일을보고 이미 사용중인 포트를 이해하십시오. 4) 컨테이너가 sshd 및 서비스를 실행하는 것이 모범 사례가 아닙니다. Docker 허브 https://hub.docker.com/_/tomcat/ – gile
에서 Dockerfiles로 CMD [ "catalina.sh", "run"]로 Tomcat을 시작하는 것이 더 낫습니다. 1) 포트는 Docker 파일에 의해 노출됩니다. netstat 출력은 docker 호스트가 아닌 컨테이너입니다. 2) 원본 이미지에 Tomcat이 설치되어 있지만 시작되지 않습니다. 3) 포트 80 및 443이 사용 중입니다. –
오류에 대한 로그 메시지를 공유합니다. – gile