LINUX.ORG.RU
ФорумAdmin

Возможно ли переопределить сетевой порт приложения при запуске контейнера?

 , ,


0

1

Я хочу запустить контейнер с nextcloud’ом на (например) 8081 порту для того, что бы реверс-прокси в другом контейнере, стоящий перед ним, проксировал трафик на некстклауд именно на порт 8081.

Если я в компос файл добавлю

ports:
  - 8081:8081

то сам сервис из веба доступен на порту 8081, но провалившись в контейнер, апач работает на 80 порту

root@9634f469ef19:/var/www/html# netstat -tlnp
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      1/apache2           
tcp        0      0 127.0.0.11:38919        0.0.0.0:*               LISTEN      -                   

Безусловно это обходится внесением изменений в файл ports.conf внутри контейнера, либо скопировав его на хост, предварительно внеся изменения прокинуть внутрь, но вопрос в заголовке


Ответ на: комментарий от ugoday

Нифига! Попробовал вот так

...
ports:
      - name: cloud
        target: 8081
        published: "8081"
...

Захожу в контейнер, а там апач всё равно на 80-ом порту висит.
Мне кажется не работает это, потому как на этапе сборки образа, апач залетает с дефолтным конфигом, в котором 80-ый порт прописан.
Тут на выбор два варианта:

  1. Добавить в компос параметр
volumes:
  - ./etc/apache2/ports.conf:/etc/apache2/ports.conf:ro

предварительно подредактировав конфиг

  1. Написать свой Dokerfile типа
FROM nextcloud:${VERSION}
COPY ports.conf /etc/apache2/ports.conf

предварительно подредактировав конфиг

Dodik
() автор топика
Ответ на: комментарий от Dodik

Не-не-не, это не так работает. Процесс в контейнере может (и должен) слушать любой свободный (в контейнере) порт по своему выбору. Задача docker compose — отобразить порт сервера в порт контейнера.

Что-то типа

ports:
  - "8081:80"
ugoday ★★★★★
()