George
секурность при этом не пострадает. Летенси - то же сильно не вырастет, т.к. все равно будет докер бридж
Alex
чем плохо
George
nginx в контейнере?
Alex
просто сайт нехрена не вываливаеться
George
чем плохо
тем что это бессмысленно )
Alex
из контейнера
Alex
только если --binding 0.0.0.0 --port 9001
Alex
вот так пропишу - тогда работает
George
" далее я хочу посмотреть его работу командой - выполняю это на сервере а не контейнере curl -L http://ip-containera:9001 получаю curl: (7) Failed to connect to 172.20.0.12 port 9001: Connection refused "
George
о господи.
Alex
смысл тогда в -p 9001:3000
George
172.20.0.12:3000 тебе надо было делать
George
смысл тогда в -p 9001:3000
чтобы опубликовать сервис на АЙПИШНИКЕ хост машины по порту 9001
George
т.е. ты идешь <ip_host>:9001дальше магия и оно само проваливается в контейнер
George
🤦‍♂️
George
ну, надо инспектировать
George
у всех работает
Alex
я же понимаю это - но чет не работает
George
телепаты в отпуске
George
попробуй тупейший вариант
George
docker run -it —rm -p 5000:80 nginx
George
и посмотри сможешь ли с хостовой тачки зайти по локалхост:5000
Alex
вот в контейнере
Alex
root@4d13d5e591d0:~# 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.1:3000 0.0.0.0:* LISTEN 21/puma 3.12.0 (tcp tcp 0 0 127.0.0.11:37764 0.0.0.0:* LISTEN - udp 0 0 127.0.0.11:54740 0.0.0.0:* - root@4d13d5e591d0:~#
Alex
пума запущена root@server-5:~# curl -L http://172.20.0.12:9001 curl: (7) Failed to connect to 172.20.0.12 port 9001: Connection refused root@server-5:~#
George
я сейчас ругаться буду
Alex
"NetworkID": "8132c8e2bf9568466a73fa587d3841330e1cb0cedde15858f696667b18faee58", "EndpointID": "c4f3637b3720b8f7d7f13135f4fac7d2e6a4840df8e3ac98c43f099da8acaba7", "Gateway": "172.20.0.1", "IPAddress": "172.20.0.12", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:14:00:0c", "DriverOpts": null
George
что такое 172.20.0.12?
Alex
это инспект
George
ты прочитал, что я тебе пишу?
George
у тебя не должно работать по адрес_контейнера:9001
Alex
что такое 172.20.0.12?
это ip контейнера - я же инспект вывел
George
https://t.me/docker_ru/138817 - это понятно?
George
ip_host - это не адрес контейнера, а адрес хост-машины с докер-демоном
George
@a_aversus стало ясно?
Alex
ip_host - это не адрес контейнера, а адрес хост-машины с докер-демоном
я указываю ip адрес машины и 127.0.0.1 - все не как 0.0.0.0:9001->3000/tcp
George
docker ps, netstat -tlpn на хост машине сделай
Petr
docker container ls
Petr
используйте понятные интерфейсы
George
чисто проверить, что вообще работает
George
docker run -it —rm -p 5000:80 nginx
Alex
root@server-5:~# netstat -tlpn Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 11189/nginx -g daem tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1244/sshd tcp6 0 0 :::9001 :::* LISTEN 16751/docker-proxy tcp6 0 0 :::22 :::* LISTEN 1244/sshd root@server-5:~#
Alex
порт 9001 есть - это я видел
Alex
все как бы нормально
George
да, это хорошо.
Alex
и в контейнре вот
Alex
root@4d13d5e591d0:~# 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.1:3000 0.0.0.0:* LISTEN 21/puma 3.12.0 (tcp tcp 0 0 127.0.0.11:37764 0.0.0.0:* LISTEN - udp 0 0 127.0.0.11:54740 0.0.0.0:* - root@4d13d5e591d0:~#
Alex
все круто
George
tcp 0 0 127.0.0.1:3000 0.0.0.0:* LISTEN 21/puma 3.12.0 (tcp
Alex
но curl -L http://172.20.0.12:9001 curl -L http://127.0.0.1:9001
Alex
не работает
George
почему у тебя пума на 127.0.0.1 слушает?
George
должна на 0.0.0.0
Alex
root@4d13d5e591d0:~# rails server => Booting Puma => Rails 4.2.1 application starting in development on http://localhost:3000 => Run rails server -h for more startup options => Ctrl-C to shutdown server Puma starting in single mode... * Version 3.12.0 (ruby 2.3.8-p459), codename: Llamas in Pajamas * Min threads: 0, max threads: 16 * Environment: development * Listening on tcp://localhost:3000 Use Ctrl-C to stop
George
🤦‍♂️🤦‍♂️🤦‍♂️🤦‍♂️
George
моя толерантсность кончилась
George
должна на 0.0.0.0
сделай это
Alex
сделай это
ок - спасибо на наводку - сейчас посмотрю
George
я просто не обратил на это внимание, т.к. у тебя выше пума на 0.0.0.0 слушает https://t.me/docker_ru/138768
George
а тут локалхост... подстава... удар ниже пояса
Alex
а тут локалхост... подстава... удар ниже пояса
ну да - поэтому --binding 0.0.0.0 --port 9001 - переопределял это
George
--port 3000
George
- так правильно
Alex
--port 3000
сейчас попробую
George
удивительно, но из всего массива возможных комбинаций ты выбрал именно неверные )
Alex
да - получилось * Environment: development * Listening on tcp://0.0.0.0:3000 Use Ctrl-C to stop root@server-5:~# curl -L http://127.0.0.1:9001 - это работает
Alexander
Всем утречко) Подскажите. Есть бэк на Node.js и есть фронт на Vue.js . Фронт коннектится по wss к бэку. В плане инфраструктуры - в докере запущен бэк, фронт и nginx, который является входной точкой и реверс прокси для бэка и фронта. Всё это работает, но периодически (хотя и редко) после обновления/перезапуска контейнера с бэком, nginx кидает 502 и реджектит wss от фронта. В чём может быть дело? Конфиги прикладываю ниже Первый конфиг: upstream some-web { server container_ip:80; } server { listen 0.0.0.0:80; server_name some.example.com; return 301 https://$host$request_uri; } server { listen 0.0.0.0:443 ssl http2; server_name some.example.com; proxy_read_timeout 86400s; proxy_send_timeout 86400s; ssl_certificate /etc/letsencrypt/live/some.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/some.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/some.example.com/fullchain.pem; location / { proxy_pass http://some-web; } } Второй конфиг: upstream some-websocket { server container_ip:20000; } map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 0.0.0.0:80; server_name server.some.example.com; return 301 https://$host$request_uri; } server { listen 0.0.0.0:443 ssl; server_name server.some.example.com; ssl_certificate /etc/letsencrypt/live/some.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/some.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/some.example.com/fullchain.pem; location / { proxy_pass http://some-websocket; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
Alexander
У меня просто мысли заканчиваются в какую сторону смотреть
Alexander
В логах только такое есть: 2019/08/07 14:06:58 [error] 6#6: *27829 connect() failed (111: Connection refused) while connecting to upstream, client: my-ip, server: server.some.example.com, request: "GET /?token= HTTP/1.1", upstream: "http://172.18.0.2:20000/?token=", host: "server.some.example.com"
Alex
т.е. ты идешь <ip_host>:9001дальше магия и оно само проваливается в контейнер
в nginx проксировать только по порту proxy_pass http://127.0.0.1:порт получаеться
George
Всем утречко) Подскажите. Есть бэк на Node.js и есть фронт на Vue.js . Фронт коннектится по wss к бэку. В плане инфраструктуры - в докере запущен бэк, фронт и nginx, который является входной точкой и реверс прокси для бэка и фронта. Всё это работает, но периодически (хотя и редко) после обновления/перезапуска контейнера с бэком, nginx кидает 502 и реджектит wss от фронта. В чём может быть дело? Конфиги прикладываю ниже Первый конфиг: upstream some-web { server container_ip:80; } server { listen 0.0.0.0:80; server_name some.example.com; return 301 https://$host$request_uri; } server { listen 0.0.0.0:443 ssl http2; server_name some.example.com; proxy_read_timeout 86400s; proxy_send_timeout 86400s; ssl_certificate /etc/letsencrypt/live/some.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/some.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/some.example.com/fullchain.pem; location / { proxy_pass http://some-web; } } Второй конфиг: upstream some-websocket { server container_ip:20000; } map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 0.0.0.0:80; server_name server.some.example.com; return 301 https://$host$request_uri; } server { listen 0.0.0.0:443 ssl; server_name server.some.example.com; ssl_certificate /etc/letsencrypt/live/some.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/some.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/some.example.com/fullchain.pem; location / { proxy_pass http://some-websocket; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
может быть засада, что контейнер пересоздался с другим айпи
George
вообще nginx очень плохо для проксирования... только если не делать, как я рекомендовал @a_aversus
George
- т.е. по реальному айпи хоста + порты
Alexander
может быть засада, что контейнер пересоздался с другим айпи
Не. У меня коннект идёт по container_name. Т.е. даже если и айпишник поменялся, то он всё равно должен найти пересозданный контейнер, ибо его имя осталось таким же
George
и нгинкс резолвит этот ДНС ТОЛЬКО ПРИ ЗАПУСКЕ
George
опачки, да?