2017-11-15 11 views
0

私は2つのサービスを持っています - 1つはapp、もう1つはdbです。 これは、ドッキングウィンドウのコンファイルのスケッチです:ドッカーの作成:localhostとして他のサービスを参照する方法

version: "2" 
services: 
    company: 
    container_name: company-app 
    extends: 
     file: ../base-config.yml 
     service: company 
    links: 
     - company-db 
    env_file: ./company.env 
    extra_hosts: 
    - "local.company.com:127.0.0.1" 

    company-db: 
    container_name: company-db 
    hostname: localhost 
    extends: 
     file: ../base-config.yml 
     service: company-db 
    env_file: ../db.env 

アプリケーションサービスは、ドッキングウィンドウコンテナ内で実行している場合Communications link failureにつながるURL

上のデータベースに接続しようとします。

私は実行中のアプリのコンテナに取り付けられ、次のコンテンツをetc/hostsファイルをチェックし、見つけました:

[email protected]:/# cat etc/hosts 
127.0.0.1 localhost 
::1 localhost ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters 
127.0.0.1 local.company.com 
172.18.0.3 d1a4391a83f4 

私は、ドッキングウィンドウのコンによって追加最後のエントリにも、私は、DBコンテナを参照することが可能なIPであることを理解したよう私はそれがcompany-dbドメインによって参照されることを知りました。

また、私はcompany-dbサービスにhostnameオプションを追加しようとしましたが、成功しませんでした。

私の質問は、同じlocalhost urlを使用してcompany-dbサービスを参照する機能を達成する構成を変更するだけです。

答えて

0

localhostポートをコンテナでマッピングすることで、これを実現できます。あなたの会社-DBサービスについては は、以下の

ports: 
    - 3306:3306 
+0

この場合、このマッピングがどのように役立つかわかりません。もう少し詳しく教えてもらえますか? – marknorkin

0

各コンテナがローカルホストとしての地位を見て書きます。 Dockerは内部DNSを使用します。 JDBC

::mysqlの:だから、このようなあなたのDBコンテナを呼び出すことができます//会社-DB/company_db

そして、あなたのDBのホスト名を削除します。

+0

質問は作成や他のドッカーの設定で行うことができますが、アプリの設定を変更して行うことはできません。 – marknorkin

+1

あなたのDBはあなたのアプリと同じサーバーにありません。アプリの設定を変更する必要があります。リモートコンテナを呼び出して "localhost"という名前を付ける場合は、間違いをします。 –

関連する問題