2017-05-03 18 views
5

Tôi đang sử dụng Dockerfiles sau để tạo một container chạy Jenkins trong một container các cửa sổ trên Windows 10 máy tính để bàn chạy Docker cho các cửa sổ phiên bản 17,03Docker cho các cửa sổ: không thể truy cập dịch vụ trên cổng tiếp xúc trong chế độ cửa sổ chứa

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" ] 

tôi tạo ra hình ảnh từ file Docker này:

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

thứ hai Dockerfile tôi đang sử dụng để cài đặt Jenkins trên đầu trang này:

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 . 

Sau đó, tôi khởi động container như thế này:

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

tôi có thể thấy vùng chứa chạy tốt và bản ghi hiển thị tất cả các tốt

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 

Tuy nhiên, tôi không thể truy cập vào máy chủ Jenkins chạy trên http://localhost:8080 trên trình duyệt web của máy chủ.

Không chắc chắn nếu nó giúp nhưng khi tôi đang chạy docker trong Linux container chế độ trên cùng một máy, tôi đã có thể truy cập máy chủ jenkins trên http://localhost:8080 sử dụng hình ảnh docker chính thức của họ.

Trả lời

6

Đây hiện là sự cố đã biết trên Windows. Không thể truy cập điểm cuối container từ máy chủ của riêng nó bằng cách sử dụng localhost/127.0.0.1. Có thể sử dụng các thùng chứa Linux ngày hôm nay vì Docker đã bao gồm một giải pháp đặc biệt duy nhất cho việc triển khai Moby/Linux của họ để chạy các thùng chứa Linux trên Windows.

Chúng tôi đang làm việc trên một sửa chữa cho điều này, nhưng hôm nay chúng tôi khuyên bạn nên làm việc xung quanh việc này bằng cách:

  • Tiếp cận điểm cuối container từ một máy chủ riêng biệt, bằng cách sử dụng địa chỉ IP của máy chủ đang chạy container, và cổng tiếp xúc cho các thùng chứa trên máy chủ của nó
  • hOẶC bằng cách truy cập các container trên cùng chủ, sử dụng địa chỉ IP nội bộ container và cảng xuất bản (bạn có thể sử dụng docker network inspect <network name> hoặc.210 để lấy địa chỉ IP của thiết bị đầu cuối chứa chính nó)
+0

Cảm ơn Kallie. Điều này làm việc hoàn hảo. Bạn có thể sửa địa chỉ IP localhost trong câu trả lời của bạn từ '172.0.0.1' thành' 127.0.0.1' không? –

+0

Tuyệt vời, tôi rất vui vì nó đã làm việc cho bạn. Và tuyệt đối - cảm ơn vì đã bắt được điều đó :) –

+0

Ahh, tôi đã dành hàng giờ cố gắng tìm ra điều này ... Cảm ơn! –

0

Để hoàn thành @ Kallie-Microsoft bài:

docs.docker.com đã được cập nhật với một phần Limitations of Windows containers for localhost and published ports


Trình kết nối cho Windows cung cấp tùy chọn chuyển đổi các vùng chứa Windows và Linux . Nếu bạn đang sử dụng vùng chứa Windows, hãy nhớ rằng có một số hạn chế liên quan đến mạng do triển khai hiện tại của Windows NAT (WinNAT). Những giới hạn này có thể có khả năng giải quyết khi dự án vùng chứa Windows phát triển.

Một điều bạn có thể gặp phải ngay lập tức là các cổng được xuất bản trên các thùng chứa Windows không lặp lại máy chủ cục bộ. Thay vào đó, chỉ có thể truy cập điểm cuối vùng chứa từ máy chủ bằng cách sử dụng cổng và IP của của vùng chứa.

Vì vậy, trong một kịch bản mà bạn sử dụng Docker để kéo một hình ảnh và chạy một máy chủ web với một lệnh như thế này:

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

Sử dụng curl http://localhost, hoặc trỏ trình duyệt web của bạn tại http://localhost sẽ không hiển thị trang web nginx (vì nó sẽ làm với các thùng chứa Linux).

Để tiếp cận vùng chứa Windows từ máy chủ cục bộ, bạn cần phải chỉ định địa chỉ IP và cổng cho vùng chứa đang chạy dịch vụ .

Bạn có thể lấy địa chỉ IP vùng chứa bằng cách sử dụng docker kiểm tra với một số - tùy chọn định dạng và ID hoặc tên của vùng chứa. Đối với ví dụ trên, lệnh sẽ giống như thế này, sử dụng tên chúng tôi đã cung cấp cho các container (webserver) thay vì ID container:

$ docker inspect \ 
    --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' \ 
    webserver 
Các vấn đề liên quan