Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker端口转发不工作_Docker_Portforwarding_Docker Container - Fatal编程技术网

Docker端口转发不工作

Docker端口转发不工作,docker,portforwarding,docker-container,Docker,Portforwarding,Docker Container,我已设置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

我已设置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)或主机名(www.myhost.net),它会工作

但是,如果我使用端口访问不起作用:主机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

建议我为什么无法将容器访问到另一台机器。如何解决此问题主机上的端口
7000
正在重定向到容器中的端口
8000
,但容器中该端口上是否有任何内容正在侦听

您的
docker run
命令有点奇怪:
-它
用于与连接的终端交互运行容器
-d
用于在后台独立运行<代码>bash最后会覆盖映像配置为启动命令的任何内容,这就是为什么我认为在端口
8000
上没有任何内容侦听的原因

尝试使用以下命令运行最简单的NGINX容器:

docker run -d -p 8081:80 nginx:alpine
然后验证您是否可以访问主页:

curl http://localhost:8081

如果这样做有效的话,我会看看你是如何运行你的图像的。

部分答案:

      $ 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
现在我部分地解决了这个问题,而我在创建一个容器中尝试不使用bash,并将我的端口更改为3000(-p3000: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 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

这件事发生在我身上,Docker代表Mac。单击Docker图标,然后重新启动。

一个非常常见的问题可能是:


将你的应用程序内部Docker绑定到0.0.0.0,而不是127.0.0.1地址,让Docker到达容器内部的应用程序。

您好,我在使用Dockerfile构建映像时遇到了这个问题。我意识到在我改变地址后,我无法将地址设置为特定的IP地址

    srv := &http.Server{
    Handler: s,
    Addr:    "127.0.0.1:5000",
}

命令
docker run-dp 5000:5000--name myapiserver api_server:v1
工作正常。 我可以毫无问题地进入5000号集装箱港口。因此,在容器中,您只能设置服务器的端口

更新


127.0.0.1是您的主机不会发送到外部站点的IP地址,处理程序的正确方式是通过所有IP地址发送,该地址为0:0:0或简言之仅为端口。

您使用的是docker toolbox还是本机docker?@Shiraaz.M我使用的是本机docker,我使用命令行安装(fed23)dnf install docker
docker compose down
完成了它所做的一切,还有更多?我不会因为执行上述操作而丢失卷、容器或图像(只是网络)?在我的情况下,localhost:8081不工作。我必须使用docker机器ip默认值(192.168.99.100)。知道为什么localhost不工作吗?当您“本机”使用Docker时,容器被“绑定”到主机,所以您使用
localhost
。当您使用类似Docker Toolbox的替代方案时,Docker在虚拟机中运行,因此容器“绑定”到虚拟机的
localhost
,您需要使用其IP地址(通常
192.168.99.100
),谢谢<代码>0.0.0.0它是键。我的示例是简单的php独立服务器:
d运行--rm-p8091:8091-v(pwd):(pwd)-w(pwd)--名称PHPphp:7.3php-s0.0.0:8091
这意味着什么?不要只使用英语。发布完整的docker命令。@mathtick它不需要任何特殊的docker命令,但您应该将应用程序的套接字绑定到
0.0.0
地址。这取决于您在容器中使用的应用程序。例如,如果你有一个nodejs应用程序,你应该在
服务器中设置
host
参数。听
函数调用
0.0.0
:哦,我明白了,这是“告诉应用程序绑定”,而不是“告诉docker绑定应用程序”。明白了吗?