【问题标题】:docker nginx container not receiving request from outside, connection refuseddocker nginx 容器没有收到来自外部的请求,连接被拒绝
【发布时间】:2016-02-15 21:50:05
【问题描述】:

我有一个正在运行的 nginx 容器:# docker run --name mynginx1 -P -d nginx;

并通过docker ps0.0.0.0:32769->80/tcp, 0.0.0.0:32768->443/tcp获得其端口信息

然后我可以从容器内得到响应(id:c30991a04b2f):

  • docker exec -i -t c3099 bash

  • curl http://localhost => 返回默认的index.html 页面内容,有效

但是,当我在容器外创建 curl http://localhost:32769 时,我得到了这个:

curl: (7) failed to connect to localhost port 32769: Connection refused


我在 docker 版本 1.9.0 的 mac 上运行; nginx 最新

有人知道这是什么原因吗?有什么帮助吗?谢谢

【问题讨论】:

    标签: nginx docker request port


    【解决方案1】:

    不完全回答您的问题,但花一些时间尝试在“为什么我的 docker 容器未连接到弹性搜索localhost:9200”的上下文中找出类似的事情,这是第一个 S.O.弹出的问题,所以我希望它可以帮助其他一些谷歌搜索的人

    如果你是linking 容器在一起(例如docker run --rm --name web2 --link db:db training/webapp env

    ...然后 Dockers 添加环境变量:

    DB_NAME=/web2/db DB_PORT=tcp://172.17.0.5:5432 DB_PORT_5432_TCP=tcp://172.17.0.5:5432 DB_PORT_5432_TCP_PROTO=tcp DB_PORT_5432_TCP_PORT=5432 DB_PORT_5432_TCP_ADDR=172.17.0.5

    ...并且还会更新您的/etc/hosts

    # /etc/hosts
    #...
    172.17.0.9  db
    

    这样您就可以在技术上连接到ping db

    https://docs.docker.com/v1.8/userguide/dockerlinks/

    所以对于弹性搜索是

     # /etc/hosts
     # ...
     172.17.0.28    elasticsearch f9db83d0dfb5 ecs-awseb-qa-3Pobblecom-env-f7yq6jhmpm-10-elasticsearch-fcbfe5e2b685d0984a00
    

    所以wget elasticseach:9200 可以工作

    【讨论】:

      【解决方案2】:

      已解决.. 我误解了 docker 端口映射的工作原理。 由于我使用的是mac,所以nginx容器的宿主机是VM,0.0.0.0:32769->80/tcp将容器的端口80映射到VM的端口32769


      解决方案:

      1. docker-machine ip vm-name => 192.168.99.xx

      2. curl http://192.168.99.xx:32769

      【讨论】:

      • 另外,您可以运行“docker-machine ls”来查看“默认”的 IP。例如本例中的VM IP为192.168.99.100: > docker-machine ls NAME ACTIVE URL STATE URL SWARM DOCKER ERRORS default * virtualbox Running tcp://192.168.99.100:2376 v1.9.1
      【解决方案3】:

      如果您在 OSX 上,您可能正在为您的 docker 环境使用 VirtualBox VM。

      确保您的实际主机(mac)具有forwarded your port 32769,以便从 localhost 可以看到该端口。
      这对旧的 bo​​ot2docker 或新的 docker 机器有效。

      VBoxManage controlvm "boot2docker-vm" --natpf1 "tcp-port32769  ,tcp,,32769,,32769"
      VBoxManage controlvm "boot2docker-vm" --natpf1 "udp-port32769 ,udp,,32769,,$32769
      

      controlvm 如果 VM 正在运行,modifyvm 是 VM 已停止)
      (用你的虚拟机名称替换“boot2docker-vm”:见docker-machine ls

      我建议不要使用-P,而是使用静态端口映射-p xxx:80 -p yyy:443
      这样,您可以使用固定值进行一次端口转发。

      当然可以通过docker-machine ip vmname直接访问VM

      curl http://$(docker-machine ip vmname):32769
      

      【讨论】:

      • 谢谢,它有帮助。!我刚才也在另一篇文章中读到了。我刚开始学习 docker,还有很多文档要阅读。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-23
      • 2019-01-05
      • 1970-01-01
      相关资源
      最近更新 更多