9

初めて Docker を試しており、Spring Boot Web アプリを Docker コンテナー内で実行しようとしています。アプリ (自己完結型の jar にパッケージ化) を構築し、それを Docker イメージに追加しています (これが必要です)。

私のSSCCEはGitHubのこのBootup リポジトリにあります。この README には、私が見ているものを再現するためのすべての手順が含まれています。しかし、基本的に:

  • Web アプリを jar にビルドします
  • docker build -t bootup .成功する実行
  • 以下の出力からわかるように、実行するdocker run -it -p 9200:9200 -d --name bootup bootupとコンテナが正常に起動するように見えますdocker ps
  • ただし、ブラウザをhttp://localhost:9200に向けると、何も表示されません

docker ps出力:

CONTAINER ID        IMAGE               COMMAND                  CREATED
a8c4ee64a1bc        bootup              "/bin/sh -c 'java -ja"   2 days ago

STATUS              PORTS                    NAMES
Up 12 seconds       0.0.0.0:9200->9200/tcp   bootup

Web アプリは、Java のデフォルトの 8080ではなく、ポート 9200 で実行するように構成されています。../gradlew clean build && java -jar build/libs/bootup.jar

私の知る限り、ホスト上でポートをブロックするファイアウォールは実行されていません (私は Mac 10.11.5 を使用しており、System Preferences >> Security & Privacy >> Firewallオフになっていることが確認されています)。

誰かが私が間違っているところを見つけることができますか?


アップデート:

を実行し、curlホストで:netstatlsof

HOST:
curl http://localhost:9200
curl: (52) Empty reply from server

netstat -an | grep 9200
tcp6       0      0  ::1.9200               *.*                    LISTEN     
tcp4       0      0  *.9200                 *.*                    LISTEN 

lsof -n -i4TCP:9200 | grep LISTEN
com.docke 2578 myuser   19u  IPv4 <someHexNumber>      0t0  TCP *:wap-wsp (LISTEN)

そしてdocker exec、コンテナに入れ、別のを実行しましたnetstat

CONTAINER:
netstat -an | grep 9200
bash: netstat: command not found

写真付きで更新:

私のブラウザ(Chrome)が指しているhttp://localhost:9200写真:

ここに画像の説明を入力

ソース コードの画像http://localhost:9200:

ここに画像の説明を入力

のページを検査している Chrome デベロッパー ツールの画像http://localhost:9200:

ここに画像の説明を入力

NetworkChrome デベロッパー ツールのタブの画像:

ここに画像の説明を入力

ここで一体何が起こっているのですか?!?!? 情報源によると、ブラウザーはDockerland からこんにちは、こんにちは! をレンダリングするはずです。メッセージは問題ありません。実際のブラウザ ページによると、ネットワーク エラーが発生しているようです。そして、Chrome 開発者ツールによると、私のアプリは、私のアプリから遠く離れていない、あらゆる種類の HTML/CSS/JS コンテンツを返しています(ソース コードをチェックして、自分の目で確かめてください)!!!

4

5 に答える 5

2

ベータ版ではなく Docker Toolbox を使用していると仮定すると ...

ポートを適切に公開するための 3 つの手順があります。

  • EXPOSE 80808080 は Dockerfile の単なるポート番号です
  • docker run コマンドで -p 8080:8080 を使用します
  • boot2docker マシンがポート 8080 からリクエストを受信できるように、Oracle Virtual Box でポート転送を設定していることを確認してください。

これは、Docker Toolbox が使用されている Windows と OSX の両方に適用されます。Linux は Oracle VirtualBox を使用して docker を実行しないため、これらのホストは 3 番目のポイントを実行する必要がありません

于 2016-08-29T19:58:23.830 に答える
2

OSX の Docker 1.12 でリポジトリをそのまま実行しました。

コンテナの起動を注意深く見ると、次のようになります。

2016-08-29 20:52:31.028  INFO 5 --- [           main] o.eclipse.jetty.server.ServerConnector   : Started ServerConnector@47949d1a{HTTP/1.1}{0.0.0.0:8080}
2016-08-29 20:52:31.033  INFO 5 --- [           main] .s.b.c.e.j.JettyEmbeddedServletContainer : Jetty started on port(s) 8080 (http/1.1)

application.ymlと Dockerfile の両方に が含まれてい9200ますが、アプリケーションは8080

于 2016-08-29T20:56:05.993 に答える