1

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から助けを借りて問題を解決することができました

+0

春が起動すると、ログには公開されているすべてのリクエストマッピングが含まれます。 Dockerで '/ callcount'を実行しているときにそのマッピングを確認できますか? –

+0

私はあなたのアプリが正常に動作すると仮定します。この問題は、画像が作成される可能性が最も高いです。新しいイメージを作成し、本当に新しく作成された場合は 'docker images'でチェックするために、新しく' mvn clean package 'を実行することをお勧めします。一般的に私はspotify mavenプラグインで良い経験をしていないので、通常はDockerfileを入れ、mvnを実行した後にdockerをビルドします。 –

+0

@ daniel.eichten私はすべての画像とコンテナを削除し、最初からドッカーを再構築しました。問題は解決しません。 – michaelbahr

答えて

0

後半2015年から別のプロジェクトではそのように働いていたが、これは失敗した理由を私は/作品をを理解していません。 T

これはDockerの問題ではなく、Springの問題でした。

here(質問は無関係かもしれないが)、私は

@EnableAutoConfiguration 
@EnableWebMvc 
@Configuration 
@ComponentScan 
public class Application { 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 
} 

予想通り今、すべてのAPIにアクセス、またドッカー内部で実行されているに

​​

から春のアプリケーションを変更見られるようにコンテナ。

関連する問題