Docker端口在容器和主机之间转发

时间:2015-07-20 05:16:10

标签: docker

我是码头工的新人,我正在尝试测试一些东西。从docs我看到我们可以在容器和主机之间映射端口。

所以我拉了$ docker run -p 127.0.0.1:3307:3306 --name mdb -e MYSQL_ROOT_PASSWORD=docker -d mariadb repo并运行像这样的容器

$ docker ps
  

这会将容器内的端口3306绑定到localhost上的端口3307或主机上的127.0.0.1接口。

它创建了容器,我用CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f7d30562194c mariadb "/docker-entrypoint. About an hour ago Up 6 minutes 127.0.0.1:3307->3306/tcp mdb

进行检查
$ telnet 127.0.0.1 3307
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused
telnet: Unable to connect to remote host

但是当我telnet到端口时,我什么也没得到

mysql

我这样做是因为我在3306端口运行-p,我不想搞砸。我尝试在boot2docker选项上切换订单,在telnet上也没有。你能帮我看看我做错了吗?

(我也在OSX 10.9.5上运行data = Data([ Bar( x=[tuples[0] for tuples in tuples_list], y=[tuples[1] for tuples in tuples_list] ) ]) layout = dict( title='Public Video Analysis', yaxis=YAxis( title = 'Views'), xaxis1=XAxis( title = "Duration in Seconds"), ) fig = Figure(data=data, layout=layout) py.iplot(fig)

2 个答案:

答案 0 :(得分:0)

如果您使用的是boot2docker,那意味着您需要在VM级别转发该端口:

VBoxManage controlvm boot2docker-vm natpf1 "name,tcp,127.0.0.1,3307,,3307"

请参阅:

答案 1 :(得分:0)

基本问题是,如果您使用boot2docker,则需要在boot2docker VM上寻址localhost,而不是Mac。

为了解决问题,这应该有效:

$ boot2docker ssh
...
$ docker run -p 127.0.0.1:3307:3306 --name mdb -e MYSQL_ROOT_PASSWORD=docker -d mariadb
...
$ telnet 127.0.0.1 3307

但显然你不想每次都进入虚拟机。所以我只需用boot2docker VM的IP替换127.0.0.1,你就完成了:

$ telnet $(boot2docker ip) 3307