Zakładając, że mam pojemnik MongoDb lub Sql Server z danymi Lotta i nagle (który jest bardzo prawdopodobny), muszę zmienić port! Może z powodu nagłego problemu bezpieczeństwa! I muszę powstrzymać pojemnik i ponownie rozpocząć bieganie na innym porcie. Dlaczego Docker nie pozwala mi to zrobić, jeśli ponownie uruchomię obraz nowy pojemnik zostanie utworzony bez danych w środku, a to powoduje dużo bałaganu.

Czy istnieje odpowiednie rozwiązanie wbudowane? Właściwe, mam na myśli rozwiązanie, które nie wymaga, aby do tworzenia kopii zapasowych baz danych, przesuń je, aby wyjąć objętość pojemnika i przywrócić je ponownie. Coś logicznego, takiego jak komenda , która może pozwolić mi zmienić przekazany port, na przykład -p 1433:1234 to 27017:1234.

2
Arrrr 5 czerwiec 2018, 13:43

3 odpowiedzi

Najlepsza odpowiedź

Bluf: Uruchom kontener Mongodb z głośnością mapowaną, aby zachować trwałość danych za pomocą tego formatu: docker run --name some-mongo -v /my/own/datadir:/data/db -d mongo

Kiedy się zgadzam, byłoby wspaniale, gdyby dokowca miał możliwość przełączenia numerów portów w pojemniku do biegania. Jak powiedzieli inni, każdy pojemnik jest procesem, a ja nie znam sposobu zmiany portu na bieżącym procesie.

Nie musisz importować danych, jeśli prawidłowo skonfigurowałeś woluminy. Robię to cały czas dla baz danych MySQL. Obraz MyQSL to tylko silnik bazy danych oddzielony od bazy danych, jeśli poprawnie mapujesz w woluminach. Tak zaprojektowany jest doker.

Patrząc na sekcję "Gdzie przechowywać dane", podaje przykład montażu głośności do folderu na hoście, aby zachować dane. Powinno to umożliwić uruchomienie nowego kontenera przy użyciu tych samych danych bez konieczności ponownego importu. Ale nie jestem tak znany z MongoDB, który jest nosql.

https://hub.docker.com/_/mongo/#!

Możesz wymagać kopii zapasowej bazy danych za pomocą tego polecenia zrzutu:

docker exec some-mongo sh -c 'exec mongodump -d <database_name> --archive' > /some/path/on/your/host/all-collections.archive

Rozpocznij nowy pojemnik z objętości mapowany i przywróć dane.

docker run --name some-mongo -v /my/own/datadir:/data/db -v /some/path/on/your/host/all-collections.archive:/data/db/collections.archive -d mongo

Musisz przywrócić ten kopię zapasową.

docker exec some-mongo sh -c 'exec mongorestore --db <database_name> --archive=/data/db/collections.archive

Od tego momentu powinno być w stanie po prostu zatrzymać i rozpocząć nowy pojemnik z mapowanymi woluminami. Twoje dane powinny pozostać trwałe. Nie powinieneś dłużej zrzucić i przywrócić więcej (dobrze, oczywiście do normalnych celów tworzenia kopii zapasowych).

1
J Roysdon 27 kwiecień 2020, 19:12

Kontener jest instancją obrazu.

Numer portu jest stan instancji kontenera, dzięki czemu można zmienić tylko podczas tworzenia kontenera.

1
sarath kumar 5 czerwiec 2018, 10:57

Możesz zmienić mapowanie portów, bezpośrednio edytować plik hostconfig.json w /var/lib/docker/containers/[hash_of_the_container]/hostconfig.json

Możesz określić [hash_of_the_container] za pomocą polecenia kontroli dokowca, a wartość pola "ID" jest hash.

1) stop the container 
2) change the file
3) restart your docker engine (to flush/clear config caches)
4) start the container

Odniesienie: Jak przypisać port mapowanie do istniejącego kontenera dokującego?

-1
fly2matrix 5 czerwiec 2018, 10:47