我已经设置了Docker容器来访问我的机器docker容器到本地的另一台机器。
在命令下创建一个容器:
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
创建容器详细信息后:
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
网络详细信息:
"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)或hostname(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端口正在使用hostmachine进行监听:
# 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
建议我为什么无法访问我的Container到另一台机器。如何解决这个问题
答案 0 :(得分:14)
主机上的端口7000
正在重定向到容器中的端口8000
,但是是否正在侦听容器中的该端口?
您的docker run
命令有点奇怪:-it
用于以连接的终端交互运行容器; -d
用于在后台运行分离;最后bash
会覆盖图像配置为启动命令的任何内容,这就是为什么我认为没有任何内容在端口8000
上进行侦听。
尝试运行最简单的NGINX容器:
docker run -d -p 8081:80 nginx:alpine
然后验证您是否可以访问主页:
curl http://localhost:8081
如果有效,我会看看你是如何运行图像的。
答案 1 :(得分:12)
我找到了这篇文章,但是又遇到了另一个问题,我相信以下建议可以帮助某人:
将您的应用绑定到Docker中的 0.0.0.0 ,而不是 127.0.0.1 地址,以使Docker到达容器内的应用。 / p>
答案 2 :(得分:2)
部分答案:
现在我部分地解决了这个问题,虽然我在没有 bash 的情况下尝试创建容器并将我的端口更改为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.
答案 3 :(得分:0)
当我遇到这个问题时(使用docker-compose管理的一组docker实例),我发现删除docker-compose的网络修复了问题:
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
答案 4 :(得分:0)
这对我来说是w / Docker for Mac。单击Docker图标,然后完成Restart
的操作。
答案 5 :(得分:0)
嗨,我在使用 Dockerfile 构建镜像时遇到了这个问题。我意识到我更改后无法将地址设置为特定 IP 地址的含义
srv := &http.Server{
Handler: s,
Addr: "127.0.0.1:5000",
}
到
srv := &http.Server{
Handler: s,
Addr: ":5000",
}
命令 docker run -dp 5000:5000 --name myapiserver api_server:v1
工作正常。
我可以毫无问题地访问容器端口 5000。那么在容器中得出结论,您只能设置服务器的端口?
更新
127.0.0.1 是您的主机不会发送到外部的 IP 地址,处理方式的正确方法是发送所有 0:0:0:0 的 IP 地址或简称为仅端口。
>