【发布时间】:2017-12-02 17:24:59
【问题描述】:
我在 Windows 主机 (Windows Server 2016) 上使用 Docker 运行 Windows 容器。我想将它绑定到主机端口 8000。然后像这样运行容器:
docker run -d -p 8000:8000 474614/my_repo:javaprogram
Docker 版本:
PS C:\Users\Administrator> docker version
Client:
Version: 17.03.1-ee-3
API version: 1.27
Go version: go1.7.5
Git commit: 3fcee33
Built: Thu Mar 30 19:31:22 2017
OS/Arch: windows/amd64
Server:
Version: 17.03.1-ee-3
API version: 1.27 (minimum version 1.24)
Go version: go1.7.5
Git commit: 3fcee33
Built: Thu Mar 30 19:31:22 2017
OS/Arch: windows/amd64
Experimental: false
据我了解,由于我从带有 Windows 容器的 Windows 服务器“本地”运行 docker,因此两者之间没有中间 VM(没有 docker 机器),因此“主机”是我运行 docker 的实际 Windows Server开。
所以我的问题是,为什么主机端口绑定不起作用?为什么我联系不上主机?
我尝试使用以下命令通过命令行添加代理
netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=8000 connectaddress="MY_HOST_IP" connectport=8000
我还感到困惑的是,当我在主机和容器上运行 netstat 时,我得到以下结果
主机上的 netstat
PS C:\Users\Administrator> netstat -ab | findstr ":80"
TCP 0.0.0.0:80 MYCOMPUTER:0 LISTENING
TCP 127.0.0.1:8000 MYCOMPUTER:0 LISTENING
TCP [::]:80 MYCOMPUTER:0 LISTENING
PS C:\Users\Administrator>
容器上的 netstat
PS C:\Users\Administrator> netstat -ab | findstr ":80"
TCP 0.0.0.0:80 MYCOMPUTER:0 LISTENING
TCP 127.0.0.1:8000 MYCOMPUTER:0 LISTENING
TCP [::]:80 MYCOMPUTER:0 LISTENING
PS C:\Users\Administrator>
但是当我尝试从我的主机访问 localhost:8000 或 127.0.0.1:8000 时,我会看到以下错误
This site can’t be reached
PS C:\Users\Administrator> docker run 474614/my_repo:javaprogram
Hello Java
当我运行图像时,我会得到上述结果。我正在尝试通过浏览器查看结果,我该怎么做?是否可以在构建 docker 映像时在 dockerfile 上分配 ip?如果是这样,请帮助我提供示例 dockerfile 或任何关于此的建议都会有所帮助。在此先感谢
【问题讨论】:
标签: docker-container docker-for-windows