不使用docker-compose版本2的容器之间的链接

时间:2016-02-09 16:26:23

标签: docker docker-compose

version 2 docker-compose文件中的容器之间的链接不起作用。

仅在使用旧版' 版本1 格式,我确实看到容器的/ etc / hosts中的链接。

我有以下基本版本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

当我运行以下命令时:

docker-compose up -d

我看到启动了两个容器,但在/ etc / 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另一个容器,但是我不能ping我的redis1' (基于名称)。

这可能是什么问题?

其他信息:

  • Docker版本1.10.0,内部版本590d5108
  • docker-compose版本1.6.0,build d99cad6
  • Linux内核:4.3.5-300.fc23.x86_64

3 个答案:

答案 0 :(得分:12)

对于docker-compose的版本2,默认情况下,同一网络中的“services”(容器)在它们之间链接。

使用下面的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 ,以检查它们是否已关联。

例如:

create temporary table idsToDelete
select
    distinct l.ID_plataforma as plataforma,
    s.ID_dispatch as dispatch,
    l.ID_licencia as licencia 
from scormvars s
left join dispatch d on s.ID_dispatch = d.ID_dispatch
left join licencias l on d.ID_licencia = l.ID_licencia
where l.ID_plataforma = 1483;
-- and then delete
delete from dispatch where ID_dispatch in (select dispatch from idsToDelete);
delete from licencias where ID_licencia in (select licencia from licencia);

您可以在以下链接中获取有关该信息的更多信息: https://blog.docker.com/2016/02/compose-1-6/ https://github.com/docker/compose/blob/master/docs/networking.md

答案 1 :(得分:5)

问题是我的Fedora主机的firewalld。

暂时禁用防火墙(' systemctl stop firewalld',然后是' systemctl restart docker')根据docker文档,一切正常。

当与docker一起使用时,firewalld似乎存在一个主要问题,请参阅:https://github.com/docker/docker/issues/16137

请注意,RHEL / Centos 7也使用firewalld。

-Arjen

答案 2 :(得分:0)

就我而言,问题出在服务名称上。

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