(I know others have asked this question before, but I\'m not able to solve the problem using the solutions proposed in other posts, so i figured i would try to post my c
It's simple. Just change the old configuration:
upstream docker-web {
server web:8000;
}
To this new one:
upstream docker-web {
server web:80;
}
The reason is, between containers can't communicate with published port. It just can communicate with the target port. 8000:80 (8000 is published port and 80 is target port).
Let say you have 8000:443, you must create the configuration with "server web:443" inside Nginx listen to 443 port number. May this help.
Well you could achieve that by editing your /etc/hosts file and add the proper entry for your web host
1.1.1.1 web
Obviouslly you'll have to replace 1.1.1.1 with the web server's real ip address (a private one I suppose). Save the file and try again. Another workaround would be to replace in the config:
upstream docker-web {
server web:8000;
}
with
upstream docker-web {
server web-ip-address:8000;
}
If you'll go for the 2nd, don't forget to restart/reload nginx!
I figured out how to fix the problem. Got some help to fix the docker-compose.yml
, so it looks like this:
docker-compose-yml:
version: "3"
services:
web:
image: user/repo:web
deploy:
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "8000:80"
networks:
main:
aliases:
- web
nginx:
image: user/repo:nginx
ports:
- 80:80
links:
- web:web
depends_on:
- web
networks:
main:
aliases:
- nginx
networks:
main:
After this the nginx container actually ran, but it was still not capable of connecting to the web-container. Found out I was able to use both curl web
and curl web -p 8000
to get the page from web, from inside the nginx container. Then I changed the upstream in my nginx.conf
from this
upstream docker-web {
server web:8000;
}
to this:
upstream docker-web {
server web;
}
Hello your problem is with the port when you linked web:web you need to specify the port in which the container runs the service for exemple
ports:
- "8000:80"
means inside the container i can access on port 80 but in the host machine i can acess via 8000. here's the doc about linking two services in docker-compose
so if you want to access web in proxy nginx don't use 8000 but use :
upstream docker-web {
server web:80;
}
instead, this should work :)
or (those are both the same)
upstream docker-web {
server web;
}