【问题标题】:In docker container connect from inside to local apache not happening在 docker 容器中从内部连接到本地 apache 没有发生
【发布时间】:2017-05-18 07:05:36
【问题描述】:

问题

我通过浏览器http://localhost访问页面,我看到public文件夹的内容。 问题是,当我运行测试时,curl 不会连接消息:

cURL 错误 7:无法连接到 localhost 端口 80:连接被拒绝(请参阅http://curl.haxx.se/libcurl/c/libcurl-errors.html)(GuzzleHttp\Exception\ConnectException)

我通过命令运行测试:

docker-compose run --rm php php vendor/bin/behat

docker-compose.yml

version: '2'
services:
  php:
    image: webdevops/php-apache:ubuntu-16.04
    volumes:
      - ./:/app
    working_dir: /app
    environment:
      - APP_ENV=local
      - VIRTUAL_HOST=localhost
      - WEB_DOCUMENT_ROOT=/app/public
    ports:
      - 80:80
  composer:
    image: composer/composer
    working_dir: /app
    volumes_from:
      - php

我的环境

  • Mac OSX 10.11.6
  • Docker for mac:17.03.1-ce-mac12 (17661)

总结

我可能在配置中遗漏了一些东西?能不能帮帮我,找问题。

谢谢。

【问题讨论】:

  • 您是否尝试过使用正在运行的容器中的curl http://$ip_address_of_your_physical_machine
  • 看来“localhost”的解析有问题。它在容器上解析到哪个地址?主机上的哪个?
  • 主机名“localhost”很特殊,在这种情况下它可能是问题的一部分。如果可以,请尝试使用另一个,看看它是否通常可以工作。

标签: php docker docker-compose


【解决方案1】:

Docker 添加了一个名为docker0 的默认网络,并且您的主机使用IP 地址172.17.0.1。您可以通过在主机中输入ifconfig 来进行测试。

如果您在未指定其他网络的情况下运行新容器,它会连接到具有 IP 地址的默认网络:172.17.0.X。这样,如果您想从容器内部访问主机上运行的 Web 服务器,请尝试:

curl http://172.17.0.1:[port]

【讨论】:

  • 不知道默认值。我想,如果我在容器命令中运行docker-compose run --rm php php vendor/bin/behat(在容器 php 上,我也有 apache),它将调用该容器的地址并连接到 apache。使用这个 IP,有帮助。
猜你喜欢
  • 2018-10-20
  • 2014-08-10
相关资源
最近更新 更多