Entrambi saranno in grado di eseguire comandi nel contenitore. Entrambi potrebbero staccare il contenitore.differenza tra docker attach e docker exec
Quindi qual è la vera differenza tra docker exec e docker attach?
Entrambi saranno in grado di eseguire comandi nel contenitore. Entrambi potrebbero staccare il contenitore.differenza tra docker attach e docker exec
Quindi qual è la vera differenza tra docker exec e docker attach?
c'era un commit PR che ha aggiunto al doc:
Nota: Questo comando (
attach
) non è per l'esecuzione di un nuovo processo in un contenitore. Vedi:docker exec
.
La risposta a "Docker. How to get bash\ssh inside runned container (run -d
)?" illustra la differenza:
(finestra mobile> = 1.3) Se usiamo
docker attach
, possiamo usare una sola istanza di shell.
Quindi, se vogliamo aprire il nuovo terminale con nuova istanza delle coperture del contenitore, abbiamo solo bisogno di correredocker exec
se il contenitore finestra mobile è stato avviato utilizzando
/bin/bash
di comando, è possibile accedere utilizzando allegare, se non allora avete bisogno di esecuzione il comando per creare un'istanza di bash all'interno del contenitore usandoexec
.
Come menzionato in this issue:
- Collegare non è per l'esecuzione di una cosa in più in un contenitore, è per il fissaggio al processo in esecuzione.
- "
docker exec
" è specificamente per l'esecuzione di nuove cose in un contenitore già avviato, sia esso una shell o qualche altro processo.
Lo stesso problema si aggiunge:
Mentre
attach
non è ben nominato, in particolare a causa del comando LXClxc-attach
(che è più similedocker exec <container> /bin/sh
, ma LXC specifico), si ha una specifica scopo di collegarti letteralmente al processo avviato Docker.
A seconda del processo, il comportamento potrebbe essere diverso, ad esempio il collegamento a/bin/bash
fornirà una shell, ma il collegamento a redis-server sarà come se avessi appena avviato Redis direttamente senza daemonizzazione.
Quando un contenitore viene avviato utilizzando/bin/bash allora diventa i contenitori PID 1 e finestra mobile attach è usato per entrare PID 1 di un contenitore. Quindi docker attach < id-container> ti porterà all'interno del terminale bash in quanto è PID 1 come menzionato durante l'avvio del contenitore. L'uscita dal contenitore interromperà il contenitore.
Considerando che nel comando docker exec è possibile specificare quale shell si desidera immettere. Non ti porterà al PID 1 del contenitore. Creerà un nuovo processo per bash. finestra mobile exec -it < ID contenitore> bash. L'uscita dal contenitore non interrompe il contenitore.
È inoltre possibile utilizzare nsenter per accedere ai contenitori interni. nsenter -m -u -n -p -i -t < pid del contenitore> È possibile trovare il PID del contenitore utilizzando: finestra mobile inspect < ID contenitore> | grep PID
Nota: Se il contenitore è stato avviato con -d flag, l'uscita dal contenitore non interrompe il contenitore, sia che si usi attach o exec per entrare.