将 docker 容器端口暴露给 eth0

将 docker 容器端口暴露给 eth0

首先:有 300 名声望的人能给“docker”做一个标签吗?谢谢

我正在使用以下命令为 elasticsearch 运行一个 docker 容器:

docker run -d -i -t -p 9200:9200 -p 9300:9300 elasticsearch:0.90.5

它可以正确启动,当我 curl localhost:9200 时,我收到了 elasticsearch json hello world 消息。

我不知道如何让端口暴露在盒子外面。我想做的是:

docker 运行-d -i -t -p 123.123.123.123:9200:9200 -p 123.123.123.123:9300:9300 elasticsearch:0.90.5

其中 123.123.123.123 是 eth0 的 IP 地址。这似乎不起作用。

现在我的问题是:如何正确运行这个容器并将这些端口暴露给外界?

这是我的“ip 地址”,来自一个运行 ubuntu 12.04 的无头 vmware 盒子。

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:52:56:93:78:f6 brd ff:ff:ff:ff:ff:ff
    inet 162.248.XXX.XXX/24 brd 162.248.XXX.255 scope global eth0
    inet6 XXX::250:ab00:fe89:78f6/64 scope link 
       valid_lft forever preferred_lft forever
3: lxcbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN 
    link/ether 72:44:60:e8:46:2a brd ff:ff:ff:ff:ff:ff
    inet 10.0.3.1/24 brd 10.0.3.255 scope global lxcbr0
    inet6 XXX::7080:60ff:fee8:462a/64 scope link 
       valid_lft forever preferred_lft forever
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether ba:d6:67:1a:13:bc brd ff:ff:ff:ff:ff:ff
    inet 172.17.42.1/16 scope global docker0
    inet6 XXX::549c:ebff:fe7d:a22/64 scope link 
       valid_lft forever preferred_lft forever
210: vethgVxkby: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master docker0 state UP qlen 1000
    link/ether ba:d6:67:1a:13:bc brd ff:ff:ff:ff:ff:ff
    inet6 XXX::b8d6:67ff:fe1a:13bc/64 scope link 
       valid_lft forever preferred_lft forever

答案1

Docker 将来可能会支持网络。但现在你可以管道像这样管理Docker网络(仅限主机)。

sudo pipework br1 $(docker run -d -i -t elasticsearch:0.90.5) 192.168.2.1/24
sudo ip addr add 192.168.2.254/24 dev br1

但是如果你希望它是公共 IP 地址 xxxx(无处不在):

pipework eth0 $(docker run -d -i -t elasticsearch:0.90.5) x.x.x.x

答案2

我认为像你一开始那样运行它docker run -d -i -t -p 9200:9200 -p 9300:9300 elasticsearch:0.90.5应该可以。也许你也有防火墙干扰?

你能先尝试在端口 9200 或其他端口上运行一个普通服务器(最好是没有 docker 的 elasticsearch,因为 elasticsearch 配置也可能有问题)并确保可以连接到该服务器吗?一旦运行正常,我认为原始命令应该可以工作。

也许可以尝试一下sudo ufw allow 9200或者做些什么?

相关内容