如何设置nginx作为Ruby应用程序的反向代理(所有在Docker中运行)

我正在尝试使用nginx和Ruby应用程序来设置一个简单的反向代理,但是我也想在Docker容器中设置它。

我已经到了可以从Docker中运行Ruby应用程序的地步,并且可以从主机(使用Boot2Docker的Mac OS X)访问正在运行的服务。 但是我现在坚持尝试实现nginx的一部分,因为我以前没有使用它,似乎大多数关于该主题的文章/教程/例子使用Rails(而不是一个简单的Sinatra / Rack应用程序),也利用sockets – 我根本不需要知道。

我也在使用Docker Compose。

完整的目录结构如下所示:

├── docker-compose.yml ├── front-end │  ├── Dockerfile │  ├── Gemfile │  ├── app.rb │  ├── config.ru ├── proxy │  ├── Dockerfile │  ├── nginx.conf │  └── public │  ├── 500.html │  ├── index.html 

要查看这些文件的内容,请参阅以下要点:

https://gist.github.com/Integralist/5cfd5c884b0f2c0c5d11

但是当我运行docker-compose up -d ,出现以下错误:

 Creating clientcertauth_frontend_1... Pulling image ./front-end:latest... Traceback (most recent call last): File "<string>", line 3, in <module> File "/Users/ben/fig/build/docker-compose/out00-PYZ.pyz/compose.cli.main", line 31, in main File "/Users/ben/fig/build/docker-compose/out00-PYZ.pyz/compose.cli.docopt_command", line 21, in sys_dispatch File "/Users/ben/fig/build/docker-compose/out00-PYZ.pyz/compose.cli.command", line 27, in dispatch File "/Users/ben/fig/build/docker-compose/out00-PYZ.pyz/compose.cli.docopt_command", line 24, in dispatch File "/Users/ben/fig/build/docker-compose/out00-PYZ.pyz/compose.cli.command", line 59, in perform_command File "/Users/ben/fig/build/docker-compose/out00-PYZ.pyz/compose.cli.main", line 445, in up File "/Users/ben/fig/build/docker-compose/out00-PYZ.pyz/compose.project", line 184, in up File "/Users/ben/fig/build/docker-compose/out00-PYZ.pyz/compose.service", line 259, in recreate_containers File "/Users/ben/fig/build/docker-compose/out00-PYZ.pyz/compose.service", line 242, in create_container File "/Users/ben/fig/build/docker-compose/out00-PYZ.pyz/docker.client", line 824, in pull File "/Users/ben/fig/build/docker-compose/out00-PYZ.pyz/docker.auth.auth", line 67, in resolve_repository_name File "/Users/ben/fig/build/docker-compose/out00-PYZ.pyz/docker.auth.auth", line 46, in expand_registry_url docker.errors.DockerException: HTTPS endpoint unresponsive and insecure mode isn't enabled. 

我不知道是什么原因导致这个错误(一些谷歌search返回https://github.com/docker/compose/issues/563,但它似乎是一个单独的问题,据我可以告诉?)。

我也不完全确定nginx.conf是否正确设置,如果我能通过这个错误。 nginx的configuration看起来应该正确地做一个反向代理(例如,使用frontend作为上游应用服务器,然后应该parsing为前端容器的docker ip地址 – >你会看到我已经链接了两个容器在一起,所以我期望前端应用程序被设置为代理容器/etc/hosts中的别名)。

有人知道我可能会失踪吗?

谢谢。

在你的要点,你使用的image作为一个关键,而不是build ,所以码头构成试图从注册表,这是失败的图像。

由于您在本地构建这些图像,因此docker-compose.yml文件的语法如下所示:

 frontend: build: front-end/ ports: - "8080:5000"