tl; drl Dockerコンテナ内で実行されている場合、RestControllerが正しく応答し、もう1つは正しく応答しません。SpringBoot @RestController外部のドッカーコンテナからアクセスできない
サービスは、2つのAPI alive
@CrossOrigin(origins = "*", maxAge = 3600)
@RestController
public class AliveController {
@RequestMapping(value = "/alive", method = RequestMethod.GET)
public ResponseEntity<?> alive() {
return new ResponseEntity<>(HttpStatus.OK);
}
}
とcallcount
を持っています。
@CrossOrigin
@RestController
public class CallController {
private static int callCount = 0;
@RequestMapping(value = "/callcount", method = RequestMethod.GET)
public ResponseEntity<?> callCount() {
return new ResponseEntity<>(++callCount, HttpStatus.OK);
}
}
これらは、どちらもドッキング用に構成されています。
version: '2'
services:
service:
image: my/service
ports:
- "4000:4000"
docker-machine ip
戻り192.168.99.100
。
alive
は、空の200応答を返します。予想通り。
$ curl -i http://192.168.99.100:4000/alive
HTTP/1.1 200
Content-Length: 0
Date: Mon, 22 Aug 2016 17:33:58 GMT
callcount
は200応答とAPIが呼び出されるたびに増加数を返す必要があります。残念ながらそれはしません。
$ curl -i http://192.168.99.100:4000/callcount
HTTP/1.1 404
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked
Date: Mon, 22 Aug 2016 17:37:26 GMT
{"timestamp":1471887446871,"status":404,"error":"Not Found","message":"No message available","path":"/callcount"}
サービスをローカルで実行すると、期待される結果が得られます。
$ curl -i http://localhost:4000/callcount
HTTP/1.1 200
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Mon, 22 Aug 2016 17:43:40 GMT
1
達人-Spotifyのプラグインは、以下Dockerfile
から画像を作成するために使用されます。
私は最新のDocker and Docker-Composeバージョンを使用しています(2016年8月22日をダウンロードしました)。下記の更新セクションを参照してください。最終的な答えが見つからないときに質問を確定します。 - 質問:callcount
にDockerコンテナの外部からアクセスできないのはなぜですか?
また試み:
@CrossOrigin(origins = "*", maxAge = 3600)
- the spring docsから同じ結果- グローバルCORS構成。
- 2つのメソッドをAliveControllerにマージします。
- すべてのコンテナ、画像、ドッカーを一から削除しました。
Udates:
callcount
APIは春で登録されていません。私はもう一度test
APIを追加して、curlでアクセスできないこれを確認しました。 alive
は正常に動作し、ログに表示されます。私は(java.vm.vendor =オラクル・コーポレーション)、ローカルJDK 1.8を使用
bash-3.2$ docker logs asmstack_service_1 | grep callcount
bash-3.2$ docker logs asmstack_service_1 | grep test
bash-3.2$ docker logs asmstack_service_1 | grep alive
2016-08-23 08:42:06.530 INFO 1 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/alive],methods=[GET]}" onto public org.springframework.http.ResponseEntity<?> de.bahr.asmstack.AliveController.alive()
。IntelliJの外とmvn spring-boot:run
でアプリケーションを実行する場合、スタートアップ方法
callcount
間
$ java -version
java version "1.8.0_74"
Java(TM) SE Runtime Environment (build 1.8.0_74-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)
差は正しく登録されています。
java -Djava.security.egd=file:/dev/./urandom -jar my-service.jar
または
java -jar my-service.jar
で実行する場合は登録されません。これがDockerコンテナ内からアクセスできない理由です。
なぜこのようなケースが考えられますか?は、それは私が@ daniel.eichtenと@ShawnClarkから助けを借りて問題を解決することができました
春が起動すると、ログには公開されているすべてのリクエストマッピングが含まれます。 Dockerで '/ callcount'を実行しているときにそのマッピングを確認できますか? –
私はあなたのアプリが正常に動作すると仮定します。この問題は、画像が作成される可能性が最も高いです。新しいイメージを作成し、本当に新しく作成された場合は 'docker images'でチェックするために、新しく' mvn clean package 'を実行することをお勧めします。一般的に私はspotify mavenプラグインで良い経験をしていないので、通常はDockerfileを入れ、mvnを実行した後にdockerをビルドします。 –
@ daniel.eichten私はすべての画像とコンテナを削除し、最初からドッカーを再構築しました。問題は解決しません。 – michaelbahr