web-dev-qa-db-ja.com

コンテナー間のリンクがdocker-composeバージョン2で機能しない

バージョン2docker-composeファイル内のコンテナー間のリンクが機能していません。

「古い」バージョン1形式を使用する場合のみ、コンテナの/ etc/hostsにリンクが表示されます。

次の基本バージョン2docker-compose.ymlファイルがあります。

バージョン: '2' 
 
サービス:
 my-app:
イメージ:Tomcat:8.0 
コンテナー名:my- app1 
リンク:
-my-redis 
 my-redis:
 image:redis 
 container_name:my-redis1 

次のコマンドを実行すると:

docker-compose up -d

2つのコンテナが起動しているのがわかりますが、/-// hostsファイルにリンクは作成されません

docker exec -it my-app1 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 
 172.18.0.3 2abb84ccada9 

「my-app1」から、「my-redis1」のIPアドレスを使用して他のコンテナにpingできますが、「名前に基づいて」「my-redis1」にpingできません。

ここで何が問題になるのでしょうか?

追加情報:

  • Dockerバージョン1.10.0、ビルド590d5108
  • docker-composeバージョン1.6.0、ビルドd99cad6
  • Linuxカーネル:4.3.5-300.fc23.x86_64
14
user2030035

問題は、私のFedoraホストのファイアウォールです。

ファイアウォールが一時的に無効になっている(「systemctl stop firewalld」、続いて「systemctl restart docker」)と、すべてがdockerのドキュメントに従って機能します。

Dockerで使用する場合、firewalldに大きな問題があるようです。次を参照してください https://github.com/docker/docker/issues/16137

RHEL/Centos 7もfirewalldを使用することに注意してください。

-アルジェン

5
user2030035

Docker-composeのバージョン2では、同じネットワーク内にある「サービス」(コンテナー)がデフォルトでそれらの間でリンクされます。

以下のdocker-compose.ymlファイルを使用する

version: '2'

services:
  my-app:
    image: Tomcat:8.0
    container_name: my-app1
    links:
      - my-redis
  my-redis:
    image: redis
    container_name: my-redis1

あなただけを実行することができますping my-appからmy-redisコンテナとping my-redisからmy-appコンテナがリンクされていることを確認します。

例えば:

$ docker-compose up -d
$ docker exec -it my-app1 bash
# ping my-redis

詳細については、以下のリンクをご覧ください。 https://blog.docker.com/2016/02/compose-1-6/https://github.com /docker/compose/blob/master/docs/networking.md

13
JesusTinoco

私の場合、問題はサービス名にありました。

version: "2"
services:
    my_auth_server:
       build: auth-server
       ports: 
           - "8082:8082"

    my_api:
       build: core-api
       ports: 
           - "8081:8081"   
       links:
           - my_auth_server:auth-server # <-- here changed from auth_server to auth-server
1
lukascode