Cara melanjutkan wadah Docker yang telah keluar

263

Mempertimbangkan:

docker run -it centos /bin/bash

Saya menekan Ctrl+ Duntuk keluar.

Saya ingin terus menjalankan wadah ini, tetapi ternyata saya tidak bisa.

Satu-satunya metode adalah

docker commit `docker ps -q -l` my_image
docker run -it my_image /bin/bash

Apakah saya benar? Apakah ada metode yang lebih baik? (Saya menggunakan buruh pelabuhan 0.8.0.)

Daniel YC Lin
sumber
1
Sudahkah Anda mencoba menetapkan nama ke wadah, dan menggunakan nama itu untuk mengendalikannya? Ngomong-ngomong, dengan "keluar", maksudmu lepas darinya, kan?
Eric Platon
12
Docker adalah alat untuk pemrograman, setidaknya begitulah cara saya menggunakannya. Jika mayoritas tidak setuju, maka seseorang harus memberi tahu Docker untuk tidak menunjuk StackOverflow sebagai tempat untuk bertanya. Saya yakin ini bukan pertanyaan pertama "DevOps" yang bisa diajukan di sini atau SuperUser.
Ted M. Young
5
Docker adalah alat pengembang. Sudah ada tag 'buruh pelabuhan' di sini. Jadi, saya pikir pantas untuk bertanya di stackoverflow. Saya menggunakannya untuk membangun gambar yang membutuhkan pembangunan dari lingkungan yang bersih.
Daniel YC Lin
6
Saya berharap orang-orang yang menandai ini sebagai "di luar topik" akan menjelaskan alasannya!
jpetazzo
2
Untuk mendukung pertanyaan ini tidak di luar topik: meta.stackoverflow.com/q/276579/210336 dan meta.stackoverflow.com/q/271279/210336 .
Matthijs Wessels

Jawaban:

291

Anda dapat memulai ulang wadah yang sudah ada setelah keluar dan perubahan Anda masih ada.

docker start  `docker ps -q -l` # restart it in the background
docker attach `docker ps -q -l` # reattach the terminal & stdin
Luca G. Soave
sumber
3
untuk singkat sebagai satu baris: docker start `docker ps -q -l` && docker attach `docker ps -q -l`
Daniel YC Lin
7
Untuk singkat sebagai satu baris: docker start -i $(docker ps -q -l). ;-) Penamaan dapat membantu untuk lebih mengontrol wadah mana yang dipilih. -ldapatkan yang terakhir, ok ...
Eric Platon
103
Bagi mereka yang baru mengenal Linux, `docker ps -q -l`bit adalah perluasan. Ini akan diganti dengan id dari kontainer terakhir (-l) dibuat. -q hanya menekan info lain (bedsides id) biasanya dikeluarkan oleh `docker ps`. ---- note: Backtick bukan tanda kutip, itu memiliki arti yang sangat istimewa. Segala sesuatu yang Anda ketik di antara backticks dievaluasi (dieksekusi) oleh shell sebelum perintah utama - unix.stackexchange.com/questions/27428/…
bnieland
1
Saya telah menemukan wadah masuk ke keadaan yang disebut Created...dari mana tidak dapat dimulai dengan docker start .... Namun itu dapat dimulai kembali menggunakandocker restart ...
Voltaire
2
Catatan: -lhanya mendapat buruh pelabuhan "terbaru". Jika Anda seperti saya dan docker ps -amenunjukkan lebih dari satu hal yang harus Anda mulai, maka Anda dapat memulai kembali "semua" (-a) dengan mengubah perintah di atas docker start `docker ps -q -a`. -qhanya membuatnya "tenang" (bukan keluaran logging).
Rock Lee
148
docker start -a -i `docker ps -q -l`

Penjelasan:

docker startmulai wadah (memerlukan nama atau ID)
-amelampirkan ke
-imode interaktif
docker pswadah Daftar
-qdaftar kontainer
-lhanya daftar ID kontainer saja wadah dibuat terakhir

Paglian
sumber
docker ps -q -l, Ini memberikan ID Kontainer dari yang terakhir dibuat bahkan jika dalam status awal.
Dharmang
apa yang disebut "pasang" ke wadah? "Melampirkan"?
skytree
49

Menggunakan:

docker start $(docker ps -a -q --filter "status=exited")

Ini akan memulai semua kontainer yang berada dalam keadaan keluar.

docker exec -it <container-id> /bin/bash

Ini akan terhubung ke wadah tertentu.

kg
sumber
2
Saya menemukan ini adalah satu-satunya yang bekerja untuk saya .. karena baris kedua yang penting itu. docker exec -it <container id> /bin/bash(atau hanya bash).
barlop
Ini bekerja untuk saya, Tapi saya harus menjalankannya dua kali karena saya punya dua kontainer. Jadi jika yang pertama dimulai dan yang kedua mendapat kesalahan. tekan saja perintah yang sama lagi dan itu harus memulai wadah berikutnya.
Andrija J Fourkidney
20

Jika Anda ingin melakukannya dalam beberapa, perintah yang mudah diingat:

  1. daftar kontainer yang dihentikan:

docker ps -a

  1. salin nama atau id wadah dari wadah yang ingin Anda lampirkan, dan mulai wadah dengan:

docker start -i <name/id>

The -iflag mengatakan buruh pelabuhan untuk melampirkan stdin wadah ini.

Jika wadah tidak dimulai dengan shell interaktif untuk terhubung, Anda perlu melakukan ini untuk menjalankan shell:

docker start <name/id>
docker exec -it <name/id> /bin/sh

The /bin/shadalah shell biasanya tersedia dengan gambar berbasis alpine.

kristianp
sumber
Jawaban yang diremehkan, ini membantu saya menemukan wadah yang saya cari jauh lebih mudah daripada "jawaban" pada pertanyaan ini.
nicholas labrecque
3
Error response from daemon: Container <id> is not running
Cerin
14

Jika Anda ingin melanjutkan tepat satu wadah Docker dengan nama yang dikenal:

docker start  `docker ps -a -q --filter "name=elas"`
Nelson Dinh
sumber
1
terima kasih @Nelson ini sangat membantu saya untuk memulai buruh pelabuhan tertentu
SACHIN CHAVAN
Dalam hal ini Anda bisa menjalankan di docker start <name>mana <nama> adalah nama wadah Anda. Setidaknya dengan buruh pelabuhan v19.03.8
Don Foumare
13

Ikuti langkah ini:

  1. Jalankan perintah di bawah ini untuk melihat bahwa semua layanan kontainer berjalan dan berhenti. Opsi -adiberikan untuk melihat bahwa wadah juga berhenti

    docker ps -a
    
  2. Kemudian mulai wadah buruh pelabuhan dengan container_idatau dengan nama tag wadah

    docker start <CONTAINER_ID> or <NAMES>
    

    masukkan deskripsi gambar di sini

    Katakan dari gambar di atas, container id 4b161b302337
    Jadi perintah yang harus dijalankan adalah

    docker start 4b161b302337
    
  3. Satu dapat memverifikasi apakah wadah berjalan dengan

    docker ps
    
Anil Jain
sumber
9

Jika Anda memiliki wadah bernama maka itu dapat dimulai dengan menjalankan

docker container start container_name

di mana container_name adalah nama dari wadah yang harus diberikan pada saat membuat wadah. Anda dapat mengganti container_namedengan id wadah jika wadah tidak bernama. ID kontainer dapat ditemukan dengan menjalankan:

docker ps -a
Gaurav Gupta
sumber
5

Perintah-perintah ini akan berfungsi untuk wadah apa pun (tidak hanya yang terakhir keluar). Cara ini akan berfungsi bahkan setelah sistem Anda reboot. Untuk melakukannya, perintah-perintah ini akan menggunakan "container id".

Langkah:

  1. Daftar semua buruh pelabuhan dengan menggunakan perintah ini dan catat id wadah dari wadah yang ingin Anda restart: docker ps -a

  2. Mulai wadah Anda menggunakan id wadah: docker start <container_id>

  3. Lampirkan dan jalankan wadah Anda: docker attach <container_id>

CATATAN: Bekerja di linux

Sugandha Jain
sumber
1

dengan nama

sudo docker start bob_the_container

atau dengan Id

sudo docker start aa3f365f0f4e

ini restart kontainer berhenti, gunakan -i untuk melampirkan STDIN kontainer atau bukan -i Anda dapat melampirkan ke sesi kontainer (jika Anda menjalankan dengan -it)

sudo docker attach bob_the_container
karol wołonciej
sumber
0
docker start `docker ps -a | awk '{print $1}'`

Ini akan memulai semua wadah yang dalam kondisi 'Keluar'

Deepank Varshney
sumber