Как я могу изменить сопоставление портов работающего образа докера?

Docker

Когда docker run создает и запускает контейнер, вы можете указать правила сопоставления портов с помощью -p. Однако очень вероятно, что вы забыли установить его в начале, или настройка неверна и ее необходимо изменить.

docker start запуска контейнера не предоставляет параметр -p, который позволяет указать правила сопоставления портов. Одним из решений является удаление исходного контейнера и создание нового.

Если это зеркалирование класса приложения без сохранения состояния, то все в порядке, если это зеркалирование базы данных, то пересобирать новую просто кошмар :) ах

Ниже я перечисляю несколько решений:

Способ 1. Измените файл конфигурации образа и перезапустите Docker.

Файл конфигурации контейнера находится в

/var/lib/docker/containers/[hash_of_the_container]/hostconfig.json

Hash_of_the_container — это хеш-значение образа Docker, которое можно просмотреть с помощью docker ps или docker inspect container_name.

Один из них является портбингинги. Например, в приведенном выше примере 5432 / TCP соответствует порту 5432 внутри контейнера, а хосторт соответствует порту, сопоставленному на хост. Просто измените этот номер. Затем перезапустите службу докера:

systemctl restart docker

Наконец, запустите образ докера.

Преимущество этого метода в том, что он не имеет побочных эффектов и операция очень проста. Недостаток в том, что нужно перезапустить всю службу докеров. Если на одном хосте запущено много образов, это может повлиять на службы других контейнеры.

Способ 2: использовать фиксацию докера

Шаг 1. Остановите док-контейнер

docker stop container01

Шаг 2: зафиксируйте док-контейнер

docker commit container01 new_image:tag

docker commit: зафиксируйте изменения файла и информацию о конфигурации контейнера в новом образе. Это будет очень полезно при тестировании, импортируйте все изменения файла и информацию о конфигурации контейнера в новый образ докеров, а затем используйте этот образ для запуска контейнера, который не окажет никакого влияния на предыдущий контейнер. нужно знать, это:

Шаг 3. Перезапустите контейнер с образом, созданным на предыдущем шаге.

docker run --name container02 -p 80:80 new_image:tag

Преимущество этого метода не влияет на другие контейнеры на единый хост. Недостатком является управление беспорядком, не так интуитивно, как первый метод.

Обычно я предпочитаю первый метод, но если он не влияет на другие службы на едином хосте, я могу использовать только второй метод.

Следите за моей публичной учетной записью WeChat