本地开发docker容器之间的通讯问题

2015/10/10 container

由于公司在办公网络设置了隔离所以导致无法使用ip+port访问本地容器,使用容器--link能够容器之间互相访问。

遇到的问题

如下所示,创建了两个容器nginx容器中的服务需要服务mysql容器中的服务,但是由于办公网络隔离原因导致无法使用ip+port访问本地容器。

xiaocaideMacBook-Pro:data_mysql xiaocai$ docker ps
CONTAINER ID        IMAGE                 COMMAND               CREATED             STATUS              PORTS                                      NAMES
5c8d3a6896a1        nginx1.10_php5.6.22   "/run.sh /bin/bash"   34 minutes ago      Up 34 minutes       8080/tcp, 9000/tcp, 0.0.0.0:8081->80/tcp   ecstatic_mahavira
fd9bbccbe367        mysql5.5.38-server    "/bin/bash"           About an hour ago   Up About an hour    0.0.0.0:8306->3306/tcp                     mysql_default
[root@fd9bbccbe367 work]# mysql -h localhost:8306 -uroot -p
Enter password:
ERROR 2005 (HY000): Unknown MySQL server host 'localhost:8306' (0)

解决方法

创建容器的时候添加link参数,如下将mysql_default容器关联并命名为localhost_db,这样在nginx容器中能够通过localhost_db进行访问。

docker run --name=nginx_tool --link=mysql_default:localhost_db -i -t -p 8082:80 -v /work/work_wwwroot/tool/:/home/wwwroot/ nginx1.10_php5.6.22
/usr/bin/mysql -h localhost_db -u root -p

指定多个link,示例:

docker run --name=qingting -i -t --link mysql_default:localhost_db  --link redis_default:localhost_redis -p 8081:80 -v /work/work_wwwroot/baidu/qingting/:/home/wwwroot nginx1.10_php5.6.22

说明

Docker通过下述两种方法吧子container里的信息暴露给父container:

  • 环境变量
  • 更新 /etc/host 文件

我们先看下docker设定的环境变量。 在 web containre里, 让我们运行 env 命令 列出所有的环境变量。

root@aed84ee21bde:/opt/webapp# env
HOSTNAME=aed84ee21bde
. . .
LOCALHOST_DB_PORT_3306_TCP_ADDR=172.17.0.2
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
LOCALHOST_DB_PORT=tcp://172.17.0.2:3306
LOCALHOST_DB_PORT_3306_TCP=tcp://172.17.0.2:3306
LOCALHOST_DB_PORT_3306_TCP_PORT=3306
. . .
[root@0e209db9fd6c /]# 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.17.0.2	localhost_db fd9bbccbe367 mysql_default
172.17.0.4	0e209db9fd6c

Search

    Table of Contents