2017-08-29 10 views
0

私はアプリを作成しました。 Eclipse内でアプリを実行すると、ブラウザからサービスを起動して、必要な応答を得ることができます。私はこのコンテナを構築していspring boot to mysql docker communcation

FROM java:8-jre 
VOLUME /tmp 
RUN mkdir -p /conf 
COPY application.properties /conf/application.properties 
ADD target/chrisbolton_service-1.0.0.jar app.jar 
RUN bash -c 'touch /app.jar' 
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar","--spring.config.location=file:/conf/application.properties"] 

私はまた、この

docker run -it --name chrisbolton_service --link chrisbolton:mysql -p 8080:8080 chrisbolton_service

を使用して、私のアプリを始めています、私はmysql実行しています。 docker psからは、私は私のコンテナをリンクする必要がありreadを持って、

bcb0a900b693 mysql:latest "docker-entrypoint..." 6 hours ago Up 3 hours 0.0.0.0:3306->3306/tcp chrisbolton

を見ることができます。私は自分のエンドポイントlocalhost:8080/blogsを打ったときしかし、私は

2017-08-29 20:20:37.516 ERROR 1 --- [nio-8080-exec-1] o.a.tomcat.jdbc.pool.ConnectionPool  : Unable to create initial connections of pool. 

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 

UPDATE取得しています:コメントでの提案から

を、私はdocker networkを作成し、私は両方のmysqlとネットワークの私のアプリを実行しています。上記と同じエラーが表示されます。ここで

は私docker network

$ docker network inspect chrisbolton [ { "Name": "chrisbolton", "Id": "394e6e207ab53967f6f15e9498c95e5b25f3827ad865cc3c21873c7de2e25465", "Created": "2017-08-29T20:37:11.136108745Z", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "172.18.0.0/16", "Gateway": "172.18.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": { "1556dae62334250b20220b05dc18365d65e498c66a47d0db4b8e7e61de8d3496": { "Name": "chrisbolton_service", "EndpointID": "4ce1a129277a0c27b07be796c4b2fa18604f19764e28124729af2479da0cd58c", "MacAddress": "02:42:ac:12:00:03", "IPv4Address": "172.18.0.3/16", "IPv6Address": "" }, "6d7faf5f43722667bdd9080a41f56d9934574900aec1be96118d9683b99f846e": { "Name": "chrisbolton", "EndpointID": "312b00c24979fdf5bad50377cf64eeec29bbdcbbf5221b981693886ae53ef490", "MacAddress": "02:42:ac:12:00:02", "IPv4Address": "172.18.0.2/16", "IPv6Address": "" } }, "Options": {}, "Labels": {} } ]

+0

リンクの代わりにドッカーネットワークを使用することをおすすめします。リンクは廃止予定とみなされます。 – BMitch

+0

これはネットワークを作成して、両方のコンテナを同じネットワーク上で実行していますか? –

+0

それは正しいです。上記の編集があると、あなたの春のブートアプリケーションはmysqlに接続しようとしていますか?あなたは使用しているホスト名/ ipとは何ですか? – BMitch

答えて

2

の私inspectある各コンテナには、独自のネットワーク名前空間で実行されます。コンテナ内のLocalhostは、ホスト上のlocalhostとは異なります。コンテナをコンテナに接続するには:

  1. 共通のネットワークを作成します。 docker network create myapp
  2. 名前とネットワークに接続されたコンテナを作成します(例:docker run --network myapp --name mysql mysql)。コンテナ間のネットワーキングが機能するためには、ホスト上にポートを公開したり、Dockerファイルのポートを公開したりする必要はありません。
  3. サービス(データベース、Webサーバなど)は、localhostではなくすべてのインタフェースでリスンする必要があります。このための構文は、すべてのインターフェイスでリッスンしたいことを示すために0.0.0.0です。
  4. アプリケーションから、ドッカーの内蔵DNSを使用して、他のコンテナの名前に接続します(例: mysql:3306。 localhost(動作しません)または公開されたポート(コンテナに直接話している)に接続しないでください。
+0

サービスはどのようにすべてのインターフェイスでリッスンしますか? –

+1

@ChrisBoltonアプリケーションに、 'localhost'または' 127.0.0.1'の代わりに '0.0.0.0'を聞くように指示します。上記の答えは、必要なドッカーの手順をカバーしています。ドッカー内で実行できる無数のアプリケーションがあり、それぞれ異なる設定ファイル、cliオプション、環境変数、またはその他の設定方法があります。 – BMitch

+0

私は今理解しています。ありがとうございました! –