首先:有 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
或者做些什么?