Załóżmy, że kontener dokera został uruchomiony z "dokiem dokowanym", a następnie zatrzymany z "zatrzymaniem dokowania". Czy polecenie "CMD" zostanie wykonane po "rozpoczęciu dokowania"?Czy "uruchamianie okna dokowanego" wykonuje polecenie CMD?
Odpowiedz
wierzę @jripoll jest błędne, wydaje się, aby uruchomić polecenie, które było pierwszym uruchomieniu z docker run
na docker start
też.
Oto prosty przykład do testu:
Najpierw utwórz skrypt do uruchomienia zwany tmp.sh
:
echo "hello yo!"
Następnie uruchom:
docker run --name yo -v "$(pwd)":/usr/src/myapp -w /usr/src/myapp ubuntu sh tmp.sh
To będzie drukować hello yo!
.
Teraz uruchom go ponownie:
docker start -ia yo
Będzie go wydrukować ponownie przy każdym uruchomieniu tego.
Nie, polecenie CMD zostało wykonane tylko po uruchomieniu operacji dokowania, aby uruchomić kontener oparty na obrazie.
W dokumentacji: W przypadku użycia w formatach powłoki lub exec, instrukcja CMD ustawia polecenie, które ma zostać wykonane, gdy wyświetla obraz.
Kiedy robisz start Döcker, zadzwonić api/client/start.go
, który wzywa:
cli.client.ContainerStart(containerID)
To nazywa engine-api/client/container_start.go
:
cli.post("/containers/"+containerID+"/start", nil, nil, nil)
Proces demon doker że wywołanie API w daemon/start.go
:
container.StartMonitor(daemon, container.HostConfig.RestartPolicy)
Monitor kontenera uruchamia kontener w container/monitor.go
:
m.supervisor.Run(m.container, pipes, m.callback)
Domyślnie demon doker jest przełożony tutaj, w daemon/daemon.go:
daemon.execDriver.Run(c.Command, pipes, hooks)
A execDriver tworzy wiersz polecenia w daemon/execdriver/windows/exec.go
:
createProcessParms.CommandLine, err = createCommandLine(processConfig, false)
który wykorzystuje processConfig.Entrypoint
iprocessConfig.Arguments
w daemon/execdriver/windows/commandlinebuilder.go
:
// Build the command line of the process
commandLine = processConfig.Entrypoint
logrus.Debugf("Entrypoint: %s", processConfig.Entrypoint)
for _, arg := range processConfig.Arguments {
logrus.Debugf("appending %s", arg)
if !alreadyEscaped {
arg = syscall.EscapeArg(arg)
}
commandLine += " " + arg
}
Ci ProcessConfig.Arguments
są wypełniane w daemon/container_operations_windows.go
:
processConfig := execdriver.ProcessConfig{
CommonProcessConfig: execdriver.CommonProcessConfig{
Entrypoint: c.Path,
Arguments: c.Args,
Tty: c.Config.Tty,
},
z c.Args
będąc argumenty pojemnik (parametry runtile lub CMD
)
Więc tak, że 'CMD
' polecenia są wykonane po "docker start
".
Jeśli chcesz, aby twój kontener uruchamiał za każdym razem ten sam plik wykonywalny, powinieneś rozważyć użycie ENTRYPOINT
w połączeniu z CMD
.
Uwaga: nie mylić RUN
z CMD
. RUN faktycznie uruchamia polecenie i zatwierdza wynik; CMD
nie wykonuje niczego podczas kompilacji, ale określa zamierzone polecenie dla obrazu.
- 1. Uruchamianie okna dokowanego wewnątrz kontenera dokowanego?
- 2. Jak znaleźć polecenie CMD obrazu dokowanego?
- 3. Jak zautomatyzować uruchamianie okna dokowanego z prywatnego repozytorium Dockerhub?
- 4. Uruchamianie obrazu dokowanego w Openshift Początek
- 5. Uruchamianie Scons 2.2.0 na Windows 7 cmd
- 6. Wykonaj polecenie CMD z kodu
- 7. Node-webkit wykonuje zewnętrzne polecenie?
- 8. Jeśli nie istnieje - polecenie CMD - nie działa
- 9. Uruchamianie poleceń mulitple w cmd przez psexec
- 10. uruchamianie poleceń w cmd przy użyciu C#
- 11. Instalowanie okna dokowanego w systemie Ubuntu 16.10
- 12. Uruchamiaj skrypt po zatrzymaniu okna dokowanego.
- 13. Jak ustawić uruchamianie argumentów podczas korzystania z funkcji Ansible do wdrażania okna dokowanego?
- 14. Uruchom polecenie reg w cmd (plik bat)?
- 15. Uruchamianie CMD lub BAT w trybie dyskretnym
- 16. Uruchamianie poleceń cmd z prawami administratora
- 17. Jak wyświetlić echo istniejącego okna CMD?
- 18. Dlaczego ta komenda tworzenia dokowanego kończy się niepowodzeniem, gdy polecenie uruchamiania dokowanego działa poprawnie?
- 19. Skrypt CMD: Jak zamknąć CMD
- 20. Czy możemy przekazywać zmienne ENV za pomocą wiersza polecenia cmd podczas budowania obrazu dokowanego przez dokowanie?
- 21. Rekursywnie usuwaj pliki 0 KB przy użyciu okna cmd
- 22. Jak mogę budować obrazy doków bez okna dokowanego?
- 23. Uruchamianie ekranu (polecenie unix) + uruchamianie polecenia w 1 komendzie?
- 24. Jak skonfigurować siatkę selenu za pomocą okna dokowanego?
- 25. Nie można uruchomić okna dokowanego po instalacji w systemie Windows
- 26. Polecenie CMD do usuwania plików i umieszczania ich w Koszu?
- 27. Czy jest polecenie usuwania logcat?
- 28. Jak dodać polecenie gzip do systemu Windows CMD?
- 29. Polecenie CMD systemu Windows do uzyskiwania dostępu do usb?
- 30. Czy virtualenv służy celowi (w produkcji) podczas korzystania z okna dokowanego?
Sprawdź to pytanie: [Co to jest różnica między CMD i punkt_wejścia w Dockerfile?] (Http://stackoverflow.com/q/21553353/4677231) Doskonały do zrozumienia 'CMD',' punkt_wejścia ' – sEpmein