Назад | Перейти на главную страницу

Как отредактировать параметры существующего контейнера?

Я создал контейнер (docker create) из изображения, которое использовало EXPOSE 22 в Dockerfile

Я начинаю через docker start <container name or ID> и получить к нему доступ через ssh.

Теперь мне нужно открыть еще один порт службы, работающей в этом контейнере. Я не могу воссоздать его, ему необходимо изменить параметры запуска, чтобы открыть этот дополнительный порт. Это возможно?

Я надеялся что docker start позволит использовать те же параметры, что и docker create или docker run Но это не так.

Примечание: я знаю, что философия Docker заключается в том, чтобы создавать эфемерные контейнеры. Это факт жизни, что мне приходится иметь дело с этим сильно настроенным контейнером (а не воссоздавать его).

Вы подразумеваете, что не использовали docker-compose для начала, но нормальный docker run. Я бы посмотрел в docker-compose, потому что тогда вы могли бы остановить его и запустить снова с новым файлом конфигурации. Это позволяет воспроизводимое создание контейнера. Все примеры простого использования docker run вы видите везде, не помогает.

В вашем конкретном случае, я думаю, все, что вам нужно сделать, добавить iptables правило. По умолчанию, dockerd манипулирует iptables правила перенаправления трафика (это может быть даже единственное EXPOSE делает). Если вы это сделаете iptables -t nat -L -n вы, вероятно, можете увидеть, как были открыты ваши порты. Вы можете создать подобное правило.

Это означает, что при перезапуске сервера правило снова исчезает. Вам нужно будет сохранить iptables штат. И это тоже касается неудобства dockerd манипулирование iptables. Трудно управлять рядом с другими службами, связанными с iptables (например, системами централизованной настройки, fail2ban, или даже простое автосохранение ваших правил).

вы можете открыть порт в команде создания. например, чтобы открыть порт 80, нужно запустить.

docker create -p 80:80 container/name

больше информации можно найти на https://docs.docker.com/engine/reference/commandline/create/