Docker端口转发不起作用

我已经设置了Docker容器来访问我的机器docker容器到本地的另一台机器。

在命令下面创build一个容器:

docker run -it -d --name containerName -h www.myhost.net -v /var/www/html -p 7000:8000 --net mynetwork --ip 172.11.0.10 --privileged myimagename bash 

创build容器详细信息后:

  CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1e1e5e9b74b4 myimgaename "bash" 21 minutes ago Up 6 minutes 0.0.0.0:7000->8000/tcp containername 

networking详细信息:

  "NetworkSettings": { "Bridge": "", "SandboxID": "fe357c54c816fff0f9d642037dc9a173be7f7e42a80776d006572f6a1395969e", "HairpinMode": false, "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "Ports": { "8000/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "7000" } ] } 

如果我访问mymachine(hostmachine)中的docker ipaddr(172.11.0.10)或主机名(www.myhost.net)

但是,如果我用端口访问不起作用:hostmachine ip:192.168.1.1

  go to the browser 192.168.1.1:7000 hostmachine and locally connected anoter machine also. 

但是我的7000端口在主机上听:

  # ps aux | grep 7000 root 10437 0.0 0.2 194792 24572 pts/0 Sl+ 12:33 0:00 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 7000 -container-ip 172.11.0.10 -container-port 8000 root 10941 0.0 0.0 118492 2324 pts/3 R+ 12:44 0:00 grep --color=auto 7000 

更新1:

  $ docker version Client: Version: 1.11.2 API version: 1.23 Go version: go1.5.4 Git commit: b9f10c9 Built: Wed Jun 1 21:39:21 2016 OS/Arch: linux/amd64 Server: Version: 1.11.2 API version: 1.23 Go version: go1.5.4 Git commit: b9f10c9 Built: Wed Jun 1 21:39:21 2016 OS/Arch: linux/amd64 

build议我为什么不能访问我的容器到另一台机器。 如何解决这个问题

主机上的端口7000被redirect到容器中的端口8000 ,但在容器中的端口上是什么东西?

你的docker run命令有点奇怪: -it是用一个附加的terminal交互地运行一个容器; -d用于在后台运行detached, bash覆盖了图像configuration为启动命令的任何东西,这就是为什么我认为在端口8000上没有监听的原因。

尝试运行最简单的NGINX容器:

 docker run -d -p 8081:80 nginx:alpine 

然后确认你可以到主页:

 curl http://localhost:8081 

如果这是工作,那么我会看你如何运行你的形象。

部分答案:

现在我部分解决了这个问题,而我尝试没有bash创build一个容器,并将我的端口更改为3000(-p 3000:80)它为我工作。

命令之前:

  docker run -it -d --name containerName -h www.myhost.net -v /var/www/html -p 3000:80 --net mynetwork --ip 172.11.0.10 --privileged myimagename bash 

命令后:

  docker run -it -d --name containerName -h www.myhost.net -v /var/www/html -p 3000:80 --net mynetwork --ip 172.11.0.10 --privileged myimagename 

然后,

bin / bash执行容器

  docker exec -it containerName bin/bash 

现在,在本地连接另一台机器。

  hostmachineip:3000 I don't know docker have any port restrictions.But This solution works for me. 

当我遇到这个问题时(用docker-composepipe理docker实例),我发现删除docker-compose的networking修复了这个问题:

 docker-compose stop # find the network related to my docker-compose setup docker network ls docker network rm NETWORKNAME # let docker-compose recreate the network: docker-compose up -d