17

次のDockerfileを使用して、 Docker Desktop for Windowsバージョン 17.03を実行している Windows 10 デスクトップの Windows コンテナーで Jenkins を実行するコンテナーを作成しています。

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 ファイルからイメージを作成します。

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

これの上にJenkinsをインストールするために使用している2番目の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しかし、ホスト マシンの Web ブラウザーで実行されている jenkins サーバーにアクセスできません。

それが役立つかどうかはわかりませんが、同じマシンでドッカーをモ​​ードで実行していたときに 、公式のドッカー イメージを使用してLinux containerjenkins サーバーにアクセスできました。http://localhost:8080

4

5 に答える 5

6

@Kallie-Microsoft の投稿を完了するには:

docs.docker.com が更新され、localhost および公開ポートの Windows コンテナーの制限に関するセクションが追加されました。


Docker for Windows は、Windows と Linux のコンテナーを切り替えるオプションを提供します。Windows コンテナーを使用している場合は、Windows NAT (WinNAT) の現在の実装により、ネットワークに関していくつかの制限があることに注意してください。これらの制限は、Windows コンテナー プロジェクトが進化するにつれて解決される可能性があります。

すぐに遭遇する可能性があることの 1 つは、Windows コンテナーの公開ポートがローカル ホストへのループバックを行わないことです。代わりに、コンテナーのエンドポイントは、コンテナーの IP とポートを使用してホストからのみ到達可能です。

したがって、Docker を使用してイメージをプルし、次のようなコマンドで Web サーバーを実行するシナリオでは:

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

curl http://localhostを使用するか、Web ブラウザーを http://localhostに向けても、nginx Web ページは表示されません (Linux コンテナーの場合とは異なります)。

ローカル ホストから Windows コンテナーにアクセスするには、サービスを実行しているコンテナーの IP アドレスとポートを指定する必要があります。

いくつかの --format オプションとコンテナーの ID または名前を指定して docker inspect を使用すると、コンテナーの IP アドレスを取得できます。上記の例では、コマンドは次のようになり、コンテナー ID の代わりにコンテナー (Web サーバー) に付けた名前を使用します。

$ docker inspect \
  --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' \
  webserver
于 2017-08-30T16:39:39.040 に答える
-1

この問題はそれほど退屈ではないようです。https://docs.docker.com/engine/reference/run/#expose-incoming-portsの次のドキュメントでは、コンテナーのポートを公開するホスト マシンで IP アドレスを指定できます。

-p=[] : Publish a container's port or a range of ports to the host
               format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort
               Both hostPort and containerPort can be specified as a
               range of ports. When specifying ranges for both, the
               number of container ports in the range must match the
               number of host ports in the range, for example:
                   -p 1234-1236:1234-1236/tcp
               When specifying a range for hostPort only, the
               containerPort must not be a range.  In this case, the container port is published somewhere within the specified hostPort range. (e.g., `-p 1234-1236:1234/tcp`)
               (use 'docker port' to see the actual mapping)

おそらくそれは 127.0.0.1 であり、Windows システムで公開されている Docker コンテナー ポートへのアクセスに関する問題を解決します。コンテナーを実行するときに、IP アドレスで -p スイッチを使用するだけです。

docker run --rm -it -p 127.0.0.1:3000:3000 ubuntu:latest
于 2020-01-30T07:16:07.450 に答える