docker机(virtualbox vm)导出容器端口到主机失败

我正在使用docker工具箱来设置:

  1. 在Windows 10中的virtualbox默认虚拟机
  2. 在virtualbox虚拟机中运行的容器

问题是我无法访问容器中的Web服务。

这里是我使用的一些命令:

# start up the web service docker run -p 8000:8000 -p 9000:9000 -t -i xxx/myweb /bin/bash -l -c '/root/myweb/demos/web/start-servers.sh' # terminal print after above cmd Starting the HTTP TLS server on port 8000 and the Secure WebSocket server on port 9000. Access the demo through the HTTP server in your browser. If you're running on the same computer outside of Docker, use https://localhost:8000 If you're running on the same computer with Docker, find the IP address of the Docker container and use https://<docker-ip>:8000. If you're running on a remote computer, find the IP address and use https://<remote-ip>:8000. WARNING: Chromium will warn on self-signed certificates. Please accept the certificate and reload the app. WebSocket Server: Logging to '/tmp/openface.websocket.log' 2017-05-27 15:10:13+0000 [-] Log opened. 2017-05-27 15:10:13+0000 [-] WebSocketServerFactory (TLS) starting on 9000 2017-05-27 15:10:13+0000 [-] Starting factory <autobahn.twisted.websocket.WebSocketServerFactory object at 0x7f00ef9f5c90> 

现在我尝试访问以下地址,但都未能加载网页:

  1. 本地主机:8000
  2. 192.168.99.100:8000(virtualbox虚拟机的ip)
  3. 172.17.0.2:8000(容器的ip)

以下是我使用的一些命令及其结果:

 $ docker-machine config --tlsverify --tlscacert="C:\\Users\\AIT\\.docker\\machine\\machines\\default\\ca.pem" --tlscert="C:\\Users\\AIT\\.docker\\machine\\machines\\default\\cert.pem" --tlskey="C:\\Users\\AIT\\.docker\\machine\\machines\\default\\key.pem" -H=tcp://192.168.99.100:2376 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5896815b991d xxx/myweb "/bin/bash -l -c /..." 12 minutes ago Up 12 minutes 192.168.99.100:8000->8000/tcp, 192.168.99.100:9000->9000/tcp thirsty_wiles $ docker inspect thirsty_wiles [ { "Id": "5896815b991d394753b5eabdd4fe7967e2e4bd65791ffe7fa1d3e82486c9f050", "Created": "2017-05-27T15:10:12.172475859Z", "Path": "/bin/bash", "Args": [ "-l", "-c", "/root/myweb/demos/web/start-servers.sh" ], "State": { "Status": "running", "Running": true, "Paused": false, "Pid": 2753, "ExitCode": 0, "Error": "", "StartedAt": "2017-05-27T15:10:12.294120929Z", "FinishedAt": "0001-01-01T00:00:00Z" }, "Image": "sha256:3c9f00308ef150eef9d50576245df69234437a4360684f9b262a284f50dc15d7", "ResolvConfPath": "/mnt/sda1/var/lib/docker/containers/5896815b991d394753b5eabdd4fe7967e2e4bd65791ffe7fa1d3e82486c9f050/resolv.conf", "HostnamePath": "/mnt/sda1/var/lib/docker/containers/5896815b991d394753b5eabdd4fe7967e2e4bd65791ffe7fa1d3e82486c9f050/hostname", "HostsPath": "/mnt/sda1/var/lib/docker/containers/5896815b991d394753b5eabdd4fe7967e2e4bd65791ffe7fa1d3e82486c9f050/hosts", "LogPath": "/mnt/sda1/var/lib/docker/containers/5896815b991d394753b5eabdd4fe7967e2e4bd65791ffe7fa1d3e82486c9f050/5896815b991d394753b5eabdd4fe7967e2e4bd65791ffe7fa1d3e82486c9f050-json.log", "Name": "/thirsty_wiles", "RestartCount": 0, "Driver": "aufs", "MountLabel": "", "ProcessLabel": "", "AppArmorProfile": "", "ExecIDs": null, "HostConfig": { "Binds": null, "ContainerIDFile": "", "LogConfig": { "Type": "json-file", "Config": {} }, "NetworkMode": "default", "PortBindings": { "8000/tcp": [ { "HostIp": "192.168.99.100", "HostPort": "8000" } ], "9000/tcp": [ { "HostIp": "192.168.99.100", "HostPort": "9000" } ] }, "RestartPolicy": { "Name": "no", "MaximumRetryCount": 0 }, "AutoRemove": false, "VolumeDriver": "", "VolumesFrom": null, "CapAdd": null, "CapDrop": null, "Dns": [], "DnsOptions": [], "DnsSearch": [], "ExtraHosts": null, "GroupAdd": null, "IpcMode": "", "Cgroup": "", "Links": null, "OomScoreAdj": 0, "PidMode": "", "Privileged": false, "PublishAllPorts": false, "ReadonlyRootfs": false, "SecurityOpt": null, "UTSMode": "", "UsernsMode": "", "ShmSize": 67108864, "Runtime": "runc", "ConsoleSize": [ 30, 120 ], "Isolation": "", "CpuShares": 0, "Memory": 0, "NanoCpus": 0, "CgroupParent": "", "BlkioWeight": 0, "BlkioWeightDevice": null, "BlkioDeviceReadBps": null, "BlkioDeviceWriteBps": null, "BlkioDeviceReadIOps": null, "BlkioDeviceWriteIOps": null, "CpuPeriod": 0, "CpuQuota": 0, "CpuRealtimePeriod": 0, "CpuRealtimeRuntime": 0, "CpusetCpus": "", "CpusetMems": "", "Devices": [], "DeviceCgroupRules": null, "DiskQuota": 0, "KernelMemory": 0, "MemoryReservation": 0, "MemorySwap": 0, "MemorySwappiness": -1, "OomKillDisable": false, "PidsLimit": 0, "Ulimits": null, "CpuCount": 0, "CpuPercent": 0, "IOMaximumIOps": 0, "IOMaximumBandwidth": 0 }, "GraphDriver": { "Data": null, "Name": "aufs" }, "Mounts": [], "Config": { "Hostname": "5896815b991d", "Domainname": "", "User": "", "AttachStdin": true, "AttachStdout": true, "AttachStderr": true, "ExposedPorts": { "8000/tcp": {}, "9000/tcp": {} }, "Tty": true, "OpenStdin": true, "StdinOnce": true, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], "Cmd": [ "/bin/bash", "-l", "-c", "/root/myweb/demos/web/start-servers.sh" ], "Image": "xxx/myweb", "Volumes": null, "WorkingDir": "", "Entrypoint": null, "OnBuild": null, "Labels": {} }, "NetworkSettings": { "Bridge": "", "SandboxID": "97f5c2894d9a6977723e3a54db77f7ff81150d8447722147a0d561a193d4caeb", "HairpinMode": false, "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "Ports": { "8000/tcp": [ { "HostIp": "192.168.99.100", "HostPort": "8000" } ], "9000/tcp": [ { "HostIp": "192.168.99.100", "HostPort": "9000" } ] }, "SandboxKey": "/var/run/docker/netns/97f5c2894d9a", "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null, "EndpointID": "2f62e7e113d8ec9f0c6760f618f53f43821c469b3c461b7447011737ee768c65", "Restarting": false, "OOMKilled": false, "Dead": false, "Gateway": "172.17.0.1", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "172.17.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "MacAddress": "02:42:ac:11:00:02", "Networks": { "bridge": { "IPAMConfig": null, "Links": null, "Aliases": null, "NetworkID": "188e40f0cb38ff9be5f053cffdf5e97c22bfed8f7ee93c685178d0c9748a032c", "EndpointID": "2f62e7e113d8ec9f0c6760f618f53f43821c469b3c461b7447011737ee768c65", "Gateway": "172.17.0.1", "IPAddress": "172.17.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:11:00:02" } } } } ] 

docker工具箱也有一个默认的“默认”VM的networking设置configuration:

1:NAT

2:仅主机适配器(Virtualbox主机专用以太网适配器#2)。

我是新来的docker工具箱,我应该怎么做才能访问容器中的网页? 你能帮我诊断我的问题吗?

如果VM(Docker Host)正在运行Linux,请尝试iptables -Fiptables -t nat -F ,然后从Windows的Host-Only或Bridge Modenetworking重新尝试,例如,如果主机接口IP为192.168.56.101,从Windows物理主机尝试IP:8080。

我假设您正在询问从运行Virtualbox的主机访问Web服务。

正如您已经知道的那样,您可以使用localhost:或:从boot2docker Linux机器访问web服务。

要从主机访问Web服务,您可以使用Virtualbox提供的端口转发function。 您可以在boot2docker机器的NAT适配器下进行设置 – >networking – >端口转发,并在boot2docker主机端口和windows机器端口之间添加端口转发。 对于你的例子,你可以说(hostip = 127.0.0.1,主机端口= 8000,访客端口= 8000)。 在此之后,您可以从主机使用localhost:8000或127.0.0.1.8000访问networking服务器。

希望这可以帮助。

关心Sreenivas