Oto rozwiązanie, gdy kontener Docker kończy normalne działanie i można edytować plik Dockerfile.
Generalnie, gdy uruchamiany jest kontener docker, aplikacja jest obsługiwana przez uruchomienie polecenia. Z odwołania do pliku Dockerfile ,
Zarówno instrukcje CMD, jak i ENTRYPOINT określają, jakie polecenie jest wykonywane podczas uruchamiania kontenera. ... Dockerfile powinien określać co najmniej jedno z poleceń CMD lub ENTRYPOINT.
Gdy tworzysz obraz i nie określasz żadnego polecenia z CMD lub ENTRYPOINT, zostanie wykonane polecenie CMD lub ENTRYPOINT obrazu podstawowego.
Na przykład oficjalny plik Docker dla Ubuntu ma CMD ["/bin/bash"]
( https://hub.docker.com/_/ubuntu ). Teraz bin/bash/
polecenie może akceptować dane wejściowe, a docker run -it IMAGE_ID
polecenie dołącza STDIN do kontenera. W rezultacie otrzymujesz interaktywny terminal, a kontener nadal działa.
Gdy polecenie z CMD lub ENTRYPOINT jest określone w pliku Dockerfile, to polecenie jest wykonywane podczas uruchamiania kontenera. Teraz, jeśli to polecenie może zakończyć się bez konieczności wprowadzania jakichkolwiek danych, zakończy się i kontener zostanie zamknięty. docker run -it IMAGE_ID
będzie nie zapewniają interaktywny terminal w tym przypadku. Przykładem może być obraz Dockera zbudowany z poniższego pliku Docker-
FROM ubuntu
ENTRYPOINT echo hello
Jeśli chcesz przejść do terminala tego obrazu, musisz utrzymać kontener w ruchu, modyfikując polecenie punktu wejścia.
FROM ubuntu
ENTRYPOINT echo hello && sleep infinity
Po normalnym uruchomieniu kontenera docker run IMAGE_ID
, możesz po prostu przejść do innego terminala i użyć, docker exec -it CONTAINER_ID bash
aby uzyskać terminal kontenera.