Когда 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