访问在Vagrant中运行的Docker容器

时间:2017-06-26 20:58:55

标签: curl docker vagrant docker-compose vagrantfile

您好我使用vagrant和docker-compose来运行一个简单的Web应用程序。它在OSX上运行良好,但是当它在一个流浪盒(ubuntu / trusty64)中运行时,它不会起作用。

我不想将docker提供程序用于vagrant,因为我正在为另一种类型的部署测试它。这应该有效,因为我做的事与我本地的机器完全相同。

为什么我甚至不能在应用程序上卷曲localhost端口80(或我试过的任何端口)?

root@vagrant-ubuntu-trusty-64:/home/vagrant/slack-challenge# docker ps
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                  NAMES
03f4740887d7        slackchallenge_nginx   "/bin/sh -c 'servi..."   43 minutes ago      Up 12 minutes       0.0.0.0:8080->80/tcp   slackchallenge_nginx_1
ed80831b69a9        slackchallenge_fpm     "/usr/bin/supervisord"   43 minutes ago      Up 12 minutes       9000/tcp               slackchallenge_fpm_1
140ea815843b        mariadb                "docker-entrypoint..."   43 minutes ago      Up 12 minutes       3306/tcp               slackchallenge_db_1
root@vagrant-ubuntu-trusty-64:/home/vagrant/slack-challenge# curl localhost
curl: (7) Failed to connect to localhost port 80: Connection refused
root@vagrant-ubuntu-trusty-64:/home/vagrant/slack-challenge#

似乎像网络一样。

2 个答案:

答案 0 :(得分:1)

是的,我只需要像这样启用端口转发:

config.vm.network "forwarded_port", guest: 8080, host: 8080, host_ip: "127.0.0.1"

现在我可以连接到我的本地端口80,它实际上是在我的vagrant vm里面运行的docker容器里面,有点令人困惑。

$ curl localhost:8080
Hello, world!

答案 1 :(得分:0)

在您的示例中,看起来您运行的唯一具有已发布报表的容器如下:

CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                  NAMES
03f4740887d7        slackchallenge_nginx   "/bin/sh -c 'servi..."   43 minutes ago      Up 12 minutes       0.0.0.0:8080->80/tcp   slackchallenge_nginx_1

在PORTS列下,这表示主机的端口8080已映射到容器的端口80.在此设置中,我希望curl localhost:8080能够工作而不是{{ 1}}因为它是主机的端口8080设置为监听。

如果您希望在主机的端口80上访问容器的端口80,则需要将端口80发布到端口80。