次のDockerfilesを使用して、Jenkinsを実行するコンテナーをWindows 10デスクトップのWindowsコンテナーで実行するコンテナーを作成しますDocker Desktop for Windowsバージョン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ファイルからイメージを作成します。
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
ただし、ホストマシンのWebブラウザのhttp://localhost:8080
で実行されているjenkinsサーバーにアクセスできません。
それが役立つかどうかはわかりませんが、同じマシンでLinux container
モードでdockerを実行していたときに、公式のdockerイメージを使用してhttp://localhost:8080
のjenkinsサーバーにアクセスできました。
これは現在、Windowsの既知の問題です。 localhost/127.0.0.1を使用して、自身のホストからコンテナーエンドポイントにアクセスすることはできません。 Dockerには、WindowsでLinuxコンテナーを実行するためのMoby/Linux実装に固有の特別な回避策が含まれているため、今日Linuxコンテナーを使用することは可能です。
現在、この問題の修正に取り組んでいますが、本日は次のいずれかの方法で回避することをお勧めします。
docker network inspect <network name>
またはdocker exec <container ID> ipconfig>
コンテナエンドポイント自体のIPアドレスを取得します)@ 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 を使用するか、または http:// localhost でWebブラウザーをポイントすると、nginx Webページが表示されません(Linuxコンテナーの場合と同様)。
ローカルホストからWindowsコンテナーに到達するには、サービスを実行しているコンテナーのIPアドレスとポートを指定する必要があります。
いくつかの--formatオプションとコンテナーのIDまたは名前を指定したdocker inspectを使用して、コンテナーのIPアドレスを取得できます。上記の例の場合、コマンドは次のようになります。コンテナーIDの代わりにコンテナー(webserver)に付けた名前を使用します。
$ docker inspect \ --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' \ webserver
この問題は以前ほど退屈ではないようです。以下のドキュメント 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