现在的环境是这样的,加入说我在一台宿主机上有两个服务。
一个容器作为tomcat,里边是java-web程序。
另一个容器作为mysql,里边跑数据存储服务。然后启动两个容器
首先是mysql : docker run -d --name -v fdsafas:/fdsafa mysqlserver image_id
然后是tomcat: docker run -d --link mysqlserver:db -p 80:8080 -v fdsafsa:/fdsafjsad image_tomcat_id现在我想在java程序中操作数据库,之前的方式是指定 数据库Ip和端口之类的,然后连接。现在我的想法是,如果在一个生产环境下,不知道容器mysql的ip地址,如何能够连接呢?难道需要让java程序去读系统的环境变量么?因为在tomcat容器中的环境变量确实能够看到mysql暴露出来的端口号,比如:[root@dockertest containers]# docker run -it --link mysqlserver:db -p 80:80 -v /some/content:/usr/share/nginx/html 5135500ec6a1 env
Usage of loopback devices is strongly discouraged for production use. Either use `--storage-opt dm.thinpooldev` or use `--storage-opt dm.no_warn_on_loop_devices=true` to suppress this warning.
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=8b91ed33f8fd
TERM=xterm
DB_PORT=tcp://172.17.0.2:3306
DB_PORT_3306_TCP=tcp://172.17.0.2:3306
DB_PORT_3306_TCP_ADDR=172.17.0.2
DB_PORT_3306_TCP_PORT=3306
DB_PORT_3306_TCP_PROTO=tcp
DB_NAME=/lonely_pasteur/db

解决方案 »

  1.   

    首先把容器的ip地址设成静态,然后放到hosts并设成域名访问,然后写一个shell脚本,如果容器重启后,防止ip地址变更,如有其它问题请加入docker新群397201742
      

  2.   

    我认为通过link别名就可以;
      

  3.   

    用--net=host就可以在容器里看到宿主机IP了
      

  4.   

    改成静态地址,直接用地址访问就是,他们在同一个ip class里的。
      

  5.   

    mysql端口映射到宿主机,然后通过修改宿主机的/etc/hosts文件,javaweb那个容器就可以通过域名来连接mysql