2017-05-03 8 views
5

나는 윈도우 버전에 대한 고정 표시기를 실행하는 Windows 10 바탕 화면에 윈도우 컨테이너에서 젠킨스를 실행하는 컨테이너를 만들려면 다음 Dockerfiles를 사용하고 창 용기 모드에서 노출 포트에서 서비스에 액세스 할 수 없습니다 17.03도커 :

FROM microsoft/windowsservercore 

RUN powershell -Command wget 'http://javadl.oracle.com/webapps/download/AutoDL?BundleId=210185' -Outfile 'C:\jreinstaller.exe' ; Start-Process -filepath C:\jreinstaller.exe -passthru -wait -argumentlist "/s,INSTALLDIR=c:\Java\jre1.8.0_91" ; del C:\jreinstaller.exe 

ENV JAVA_HOME c:\\Java\\jre1.8.0_91 
RUN setx PATH %PATH%;%JAVA_HOME%\bin 

CMD [ "java.exe" ] 

docker build -t windows-java:jre1.8.0_91 . 

두 번째 Dockerfile 나는이 위에 젠킨스를 설치하는 데 사용하고 있습니다 :

FROM windows-java:jre1.8.0_91 

ENV HOME /jenkins 
ENV JENKINS_VERSION 2.58 
RUN mkdir \jenkins 
RUN powershell -Command "wget -Uri https://updates.jenkins-ci.org/latest/jenkins.war -UseBasicParsing -OutFile /jenkins/jenkins.war" 

EXPOSE 8080 
EXPOSE 50000 

CMD java -jar C:\\jenkins\\jenkins.war 


docker build -t jenkins-windows:2.0 . 
나는이 고정 표시기 파일에서 이미지를 만들

그때 나는이 같은 컨테이너를 시작 :

docker run --name jenkinsci -p 8080:8080 -p 50000:50000 jenkins-windows:2.0 

내가 잘하고 로그 그러나 모든 좋은

PS C:\Users\mandeep\ringba\ringba-jenkins-setup-windows\jenkins-master> docker ps 
CONTAINER ID  IMAGE     COMMAND     CREATED    STATUS    PORTS            NAMES 
85ba2ef525a1  jenkins-windows:2.0 "cmd /S /C 'java -..." 8 hours ago   Up 8 hours   0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp jenkinsci 

을 보여주는 실행 컨테이너를 볼 수있다, 나는에 http://localhost:8080에서 실행중인 젠킨스 서버에 액세스 할 수 없습니다 호스트 시스템의 웹 브라우저.

도움이된다면 확실하지만이 같은 시스템에 Linux container 모드로 고정 표시기를 실행했을 때, 나는 http://localhost:8080 자신의 공식 고정 표시기 이미지를 사용하여 젠킨스 서버에 액세스 할 수 있었다 없습니다.

답변

6

현재 Windows에서 알려진 문제입니다. localhost/127.0.0.1을 사용하여 자체 호스트에서 컨테이너 끝점에 액세스 할 수 없습니다. Docker에는 Windows에서 Linux 컨테이너를 실행하는 Moby/Linux 구현에 고유 한 특수한 해결 방법이 포함되어 있기 때문에 Linux 컨테이너를 사용할 수 있습니다.

우리는 이것에 대한 문제 해결을 위해 노력하고 있지만 오늘날 우리가 하나가이 문제를 작업하는 것이 좋습니다 : 실행중인 호스트의 IP 주소를 사용하여 별도의 호스트에서

  • 액세스 컨테이너 엔드 포인트 컨테이너 및 호스트
  • 을 또는 컨테이너의 내부 IP 주소를 사용하여 동일한 호스트에 컨테이너에 액세스하여 컨테이너의 노출 포트 및 게시 된 포트는 (당신이 사용할 수있는 docker network inspect <network name> 또는,245,는 Kallie - 마이크로 소프트 포스트 @ 완료하려면 컨테이너 엔드 포인트 자체)
+0

감사 Kallie을. 이것은 완벽하게 작동했습니다. 로컬 호스트의 IP 주소를'172.0.0.1'에서'127.0.0.1'로 수정하십시오. –

+0

위대한, 그것은 당신을 위해 일해서 기뻐요. 그리고 절대적으로 - 그것을 잡아 주셔서 감사합니다 :) –

+0

아, 이것을 찾으려고 시간을 보냈습니다 ... 고마워요! –

0

의 IP 주소를 얻을 수 있습니다 :

는 docs.docker.com 섹션 Limitations of Windows containers for localhost and published ports


업데이트되었습니다

Windows 용 도커는 Windows 및 Linux를 바꿀 수있는 옵션을 제공합니다. 컨테이너. Windows 컨테이너를 사용하는 경우 현재 Windows NAT (WinNAT) 구현으로 인해 네트워킹과 관련하여 몇 가지 제한 사항이 있음을 유의하십시오. 이러한 제한은 Windows 컨테이너 프로젝트가 발전함에 따라 이 잠재적으로 해결할 수 있습니다.

Windows 컨테이너의 게시 된 포트 은 로컬 호스트에 대해 루프백을 수행하지 않는다는 점을 알 수 있습니다. 대신 컨테이너 끝점은 컨테이너의 IP 및 포트를 사용하는 호스트에서만 도달 할 수 있습니다.

그래서, 당신은 이미지를 끌어와이 같은 명령으로 웹 서버를 실행하는 부두 노동자를 사용하는 시나리오의 : 표시되지 않습니다 http://localhost에서 웹 브라우저를 컬 http://localhost을 사용 또는 포인팅

docker run -d -p 80:80 --name webserver nginx 

nginx 웹 페이지 (Linux 컨테이너의 경우 처럼).

로컬 호스트에서 Windows 컨테이너에 연결하려면 서비스에 서비스가 실행되는 컨테이너의 IP 주소와 포트를 지정해야합니다.

도커 검사를 사용하여 일부 --format 옵션과 컨테이너의 ID 또는 이름을 사용하여 컨테이너 IP 주소를 가져올 수 있습니다. 위의 예를 들어, 명령 대신 컨테이너 ID의 우리가 컨테이너 (웹 서버)에게 준 이름을 사용하여, 다음과 같이 보일 것이다 :

$ docker inspect \ 
    --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' \ 
    webserver 
관련 문제