Nginx docker只能在docker-compose上find容器

我不知道如果这是正确的,但我有一个容器上的代理请求到一个Nodejs应用程序的一个nginx和一切都工作正常的Nodejs docker-compose文件与依赖function和所有。 但是现在我想将它们分离成不同的docker撰写文件,然后碰巧nginx找不到上游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 

我的configuration代理的东西的作品,但无论如何是:

 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; } } 

如果我做泊坞窗我得到这个:

 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 lsdocker 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没有连接到任何networking,但它看起来试图创build自己的networking( nginx_default )? 请注意,我看不到任何连接到该networking的容器,可能是因为它启动失败:

 [ { "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在networkingnginx_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 

另一个docker组成:

 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"] 

您可以使用外部networking来连接两个容器。 但首先你必须创buildnetworking,我们将其称为我的networking:

 docker network create my-network 

然后我们需要在每个docker-compose文件中声明networking:

 networks: default: external: name: my-network 

如果您创build2个docker-compose文件,Docker将创build2个不同的隔离networking。 AFAIK,唯一的方法是创build一个networking,并将容器“链接”到该networking。

所以,创build一个networking然后使用它。 请参阅此处的文档: https : //docs.docker.com/compose/networking/#use-a-pre-existing-network