Замените ip: порт на другой ip: порт, используя sed - PullRequest
0 голосов
/ 28 января 2020

У меня есть nginx файл конфигурации, где у меня есть IP-адрес моего контейнера. Если я воссоздаю контейнер, у него будет новый ip, поэтому я хочу заменить его.

У меня есть. sh script:

#!/bin/bash
ip_new=$(sudo docker exec -ti pqf_ui_dev hostname -I) #to assign  container ip to this variable
sudo sed  "s~proxy_pass http[:]//[^ ][:]80*~proxy_pass http://$ip_new:80~"  -i /etc/nginx/sites- 
enabled/docker-pqf

, например, если мой старый ip: port был 172.17.0.1:80, а новый 172.17.0.2:80, мой sed заменил его следующим образом:

proxy_pass http://172.17.0.4 ^M:80

Как я могу изменить свой скрипт для замены ip без этого ^M?

Ответы [ 2 ]

0 голосов
/ 28 января 2020

Если бы я делал это, я бы запустил прокси nginx в контейнере также и proxy_pass к имени контейнера, а не к динамическому c IP, который будет постоянно меняться.

например, если используется compose file

version: '3.7'
services:
  proxy:
    image: nginx
    # Docker config required for nginx
  backend: 
    # Config for your backend service
    ports:
     - "80:80"

Затем в файле nginx conf вы можете ссылаться на бэкэнд-сервис как http://backend: 80 и docker DNS разрешит IP-адрес для вас завершенным с балансировкой нагрузки, если у вас запущено несколько экземпляров.

0 голосов
/ 28 января 2020

Использование:

ip_new=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' pqf_ui_dev)

Вместо:

ip_new=$(sudo docker exec -ti pqf_ui_dev hostname -I)

И, возможно, вам может понравиться это sed:

sudo sed -E 's~(proxy_pass https?://)[^ :;]+(:?\d*)~\1'$ip_new'\2~' -i /etc/nginx/sites- enabled/docker-pqf

Он не идеален, но более универсален и не повторяет текст поиска, такой как proto, host, port.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...