我不确定这是否正确,但我有一个容器来代理对应用程序nginx
的请求,并且在具有依赖功能和所有这些的文件上一切正常。但是现在我想将它们分成不同的 docker compose 文件,然后碰巧 nginx 找不到上游:Nodejs
docker-compose
nodejsapp
2017/11/10 15:21:38 [emerg] 1#1: host not found in upstream "nodejsapp" in /etc/nginx/conf.d/default.nodejsapp.conf:8
nginx: [emerg] host not found in upstream "nodejsapp" in /etc/nginx/conf.d/default.nodejsapp.conf:8
我对代理的配置有效,但无论如何是:
server {
listen 80;
location / {
proxy_pass http://nodejsapp:4000;
proxy_set_header X-Remote-Addr $proxy_add_x_forwarded_for;
proxy_cache STATIC;
proxy_cache_valid 200 1d;
proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
proxy_ignore_headers X-Accel-Expires Expires Cache-Control;
}
location ~* ^.+\.(atom|bmp|bz2|css|doc|docx|eot|exe|gif|gz|ico|jpeg|jpg|js|mid|midi|mp4|ogg|ogv|otf|pdf|png|ppt|pptx|rar|rss|rtf|svg|svgz|swf|tar|tgz|ttf|txt|wav|woff|xls|xml|zip)$ {
access_log off;
log_not_found on;
expires max;
proxy_pass http://nodejsapp:4000;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
如果我做 docker ps 我得到这个:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f4d888e6c37d nginx "nginx -g 'daemon ..." 3 minutes ago Restarting (1) 33 seconds ago nginx
5867ac82e5da nodejsapp:3.2.0-dev "pm2-docker proces..." 25 minutes ago Up 25 minutes 80/tcp, 443/tcp, 43554/tcp, 0.0.0.0:4000->4000/tcp nodejsapp
我知道 docker 容器可以通过名称访问其他容器。然后我检查了我拥有的网络:docker network ls
NETWORK ID NAME DRIVER SCOPE
cf9b7ea0a5b7 bridge bridge local
549c48fa592a docker_default bridge local
652ffb4094f0 host host local
412ed3bbfd01 nginx_default bridge local
85a803c70f83 none null local
然后docker network inspect bridge
我可以看到nodejsapp
容器等:
"Containers": {
"5867ac82e5dad7642155a7c3df05c37cd83c1be5a0eb49d55cf5325bfaa7ea4d": {
"Name": "nodejsapp",
"EndpointID": "a362d02b083e90bb0acc50a2af8ec5a5f0a9a23a9f0ed2bfb62b1a6c60586fb8",
"MacAddress": "02:42:ac:11:00:04",
"IPv4Address": "172.17.0.4/16",
"IPv6Address": ""
},
"b272cd07cc1e5c28632cbaf05858cf373b6a13304f69bee5de73fc57e5a3cf79": {
"Name": "sad_poitras",
"EndpointID": "c5b1e2389f5da8b9acf4f6c7a13f5d6e09411cd960b9e4dcd8ed38fef2982780",
"MacAddress": "02:42:ac:11:00:03",
"IPv4Address": "172.17.0.3/16",
"IPv6Address": ""
},
"ffd171939e534a4749a4d215f52c1add353537e91e4a95d7b752775ee2b4c70f": {
"Name": "elated_hawking",
"EndpointID": "eca2709e189d8d5922e1dd5d8c5af14826bd77d5a399b63363e3b07671fb5169",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
}
},
而且我可以看到 nginx 没有连接到任何网络,但是在我看来它试图创建自己的网络(nginx_default
)?请注意,我看不到任何连接到该网络的容器,可能是因为它在启动时失败:
[
{
"Name": "nginx_default",
"Id": "412ed3bbfd01336c86473a8d07fe6c444389cac44838552a40d6b7ec7f4c972d",
"Created": "2017-11-10T15:21:35.2016921Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.19.0.0/16",
"Gateway": "172.19.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
有没有办法使用桥接器获得它?我做错了什么吗?
更新:我已将 nodejsapp 设置为在网络上nginx_default
,然后我nginx
开始了。但是代理根本不工作,我得到nginx
. 我的 docker 将其拆分为两个不同的撰写文件后撰写文件:
version: '2'
services:
nginx:
build:
context: .
dockerfile: Dockerfile.dev
image: nginx:3.1.0-dev
ports:
- "10100:80"
restart: always
container_name: nginx
我的 Dockerfile.dev:
FROM nginx:latest
RUN mkdir /tmp/cache
COPY ./nodejsapp/default.dev.nodejsapp.conf /etc/nginx/conf.d/default.nodejsapp.conf
COPY nginx.dev.conf /etc/nginx/nginx.conf
另一个码头工人组成:
version: '2'
services:
nodejsapp:
build:
context: .
dockerfile: Dockerfile.dev
image: nodejsapp:3.2.0-dev
ports:
- "4000:4000"
restart: always
container_name: nodejsapp
和相应的 Dockerfile.dev:
FROM keymetrics/pm2:latest
COPY dist dist/
COPY process.yml .
CMD ["pm2-docker", "process.yml"]