В некоторых моих контейнерах работает веб-сервер (PHP, NodeJS).Докер-контейнер недоступен в главной машине
Если мы возьмем пример контейнера NodeJS, это его конфигурация
докер-compose.yml
version: '2'
services:
webapp:
build: .
volumes_from:
- data
links:
- db:db
- redis:redis
ports:
- '8080:3000'
restart: always
...
С помощью этой конфигурации, я могу получить доступ к моей веб-приложение через http://example.com:8080/
но я не могу получить доступ на мой хост-машине с
$ curl localhost:8080
(Time-out)
у меня есть N ginx сервер на моем хосте с такой конфигурацией:
example.com.conf
upstream webapp {
server 127.0.0.1:8080;
}
server {
listen 80;
listen [::]:80;
server_name example.com;
location/{
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header HOST $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_redirect off;
proxy_pass http://webapp;
}
}
Но присоединения к http://example.com/
бросить 504 Шлюз тайм-аут.
Если я пытаюсь изменить конфигурацию порта в моем docker-compose.yml
по '127.0.0.1:8080:3000'
проблемы все еще здесь, но не может получить доступ к http://example.com
(и http://example.com:8080
, но это результат я хочу).
Это очень странно, и у меня нет проблем с запуском моего приложения на новом сервере. Я ищу корень этой проблемы.
Спасибо за вашу поддержку.
EDIT:
$ netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.11:59712 0.0.0.0:* LISTEN -
udp 0 0 127.0.0.11:33293 0.0.0.0:* -
Web-сервер должен быть прослушивает порт 3000, но у меня есть
$ docker-compose logs
webapp_1 | Express server listening on port 3000 in production mode
Сервер также работает ...
$ docker port webapp_1
3000/tcp -> 127.0.0.1:8080
не должен быть «завиток» http: //example.com: 8080/'? – stacksonstacks
Вы используете докерную машину? –
@stacksonstacks: Я хочу, чтобы мой контейнер был доступен только локально и перенаправлялся в общедоступном домене с помощью Nginx. –