如何在程序层面符合Docker呢?


在用docker的时候遇到这么一个问题:
  1. 先创建了 db container,mysql
  2. 然后创建 web container, 并link 了mysql容器


似乎只能在程序里需要去读环境变量 MYSQL_PORT_3306_TCP_ADDR 和 MYSQL_PORT_3306_TCP_PORT,来做数据库连接.

可这是由于 --link mysql5.6:mysql 这么命名所以才读这个环境变量,如果别人部署时,--link的参数不叫mysql,岂不是程序就要报错了呢?

问题1:请问下大家在这个问题上的解决办法,谢谢。

问题2:另外,我的db container,在link它的那些容器中都可以正常使用...可host机却连不上,我加了-P,但却连不上映射过的端口...求分析。
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=mysecretpassword -P -d mysql
镜像用的是 docker.cn上的mysql

已解决。
居然是因为默认-P绑定的为0.0.0.0,而改成绑定127.0.0.1或者真实ip之后,就没问题了。这应该是个坑吧..

谢谢
已邀请:

田浩浩 - wizmacau developer

赞同来自:


<span style="font-size:16px">#问题1:</span>

官方文档(https://docs.docker.com/refere ... %23run)
以楼主的例子来说 --link mysql5.6:mysqlmysql5.6是db container的名字, mysql是web container 里的mysql的别名(mysql能不能修改本人还没测试过)

<span style="font-size:16px">#问题2:</span>

此问题本人还没测试过,如有遇到第一时间会通知楼主。

BTW: 理解此问题楼主可以参考( http://dockerone.com/article/137)等系列文章

PS: 请参考 (https://github.com/docker-libr ... /mysql)

Sonyfe25cp

赞同来自:


先谢谢楼上~~

> mysql是web container 里的mysql的别名(mysql能不能修改本人还没测试过)

这个是可以随便修改的,例如--link mysql5.6:mysql1 但是这样会导致web容器中的环境变量名称就变了。

我的困惑在于:因为程序里面要写jdbc:mysql:${host}:${port}这样,但是这个host和port的具体数值要么从参数传递,要么读系统环境变量(因为用了docker),但是环境变量依赖于配置时候的这个--link的参数,所以这样等于要求程序内部需要硬编码去读MYSQL_PORT_3306_TCP_ADDR的值。

第二个问题,请您也试一下..因为其他容器(如tomcat)的-P 我都试过了,是可以用的。但是只有mysql的不好用,所以不知道是不是我的操作问题.

Casgy

赞同来自:


问题一:
方法一 用fig定义整套服务
方法二 自己规定web容器的环境变量如dburl,部署的人自己手动设定
推荐方法一

要回复问题请先登录注册