【发布时间】:2017-04-24 21:36:57
【问题描述】:
挑战
如上所述,我想通过 docker 本身实现与在 docker-compose 的帮助下相同的目标。
我想更深入地了解 docker,并能够在平台上使用 docker,而 docker-compose 不是一个选项。
我目前在做什么(使用 docker-compose)
1)
我使用这个 docker-compose 文件:
---
version: '3'
services:
app:
build: .
proxy:
build: docker/proxy
ports:
- "80:80"
“app”服务启动一个容器,该容器在端口 3002 上运行节点(暴露在 dockerfile 中)
“代理”服务启动一个运行 nginx 的容器,其中包含以下配置:
server {
listen 80;
server_name app;
location / {
proxy_pass http://app:3002;
}
}
2)
然后我将它添加到我的主机 PC 的 /etc/hosts 中:
127.0.0.1 app
3)
现在我运行 docker-compose up 和 vit http://app ,这会命中节点应用程序。
很好很简单,对吧?
现在我只想对 docker 做同样的事情。
我尝试过的
1 使用相同的 nginx 配置。
2 使用 bash 脚本启动容器
为了做到这一点,我
- 创建了一个网络
- 将网络添加到两个容器中
- 将“app”-container 主机名、网络别名和 dns-search 设置为“app”(因为我希望其中一个选项会有所帮助)
这里是脚本:
docker network create --driver bridge dockertest_nw
docker build -t dockertest_app .
docker create \
--name dockertest_app_con \
--network dockertest_nw \
--hostname app \
--network-alias=app \
--dns-search=app \
dockertest_app
docker build -t dockertest_proxy ./docker/proxy/
docker create \
--name dockertest_proxy_con \
--network dockertest_nw \
--hostname proxy \
--network-alias=proxy \
--dns-search=proxy \
-p 80:80 \
dockertest_proxy
docker start dockertest_proxy_con
docker start dockertest_app_con
很遗憾,这不起作用。
我也知道 docker-compose 以某种方式使用了来自 docker 的 dns 服务,我也应该以某种方式使用它?
谁能给点建议?
更新: 只是我从 nginx 容器中获得以下日志的信息,我会说这表明 nginx 无法解析“应用程序”:
172.18.0.1 - - [13/Apr/2017:14:49:06 +0000] "GET / HTTP/1.1" 502 576 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" "-"
2017/04/13 14:49:06 [error] 5#5: *13 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.0.1, server: app, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:3002/", host: "app"
【问题讨论】:
标签: networking nginx docker proxy