Docker: Penampung terus memulai ulang lagi

108

Saya hari ini menggunakan sebuah instance dari MediaWiki menggunakan gambar appcontainers / mediawiki docker, dan sekarang saya memiliki masalah baru yang tidak dapat saya temukan petunjuknya. Setelah mencoba melampirkan ke wadah depan mediawiki menggunakan:

docker attach mediawiki_web_1

yang menjawab Terminatedkonfigurasi saya karena alasan yang saya abaikan, juga mencoba:

docker exec -it mediawiki_web_1 bash

Saya mendapatkan sesuatu yang mendekati pesan kesalahan:

Error response from daemon: Container 81c07e4a69519c785b12ce4512a8ec76a10231ecfb30522e714b0ae53a0c9c68 is restarting, wait until the container is running

Dan ada masalah baru saya, karena container ini tidak pernah berhenti restart. Saya dapat melihat bahwa penggunaan docker ps -ayang selalu mengembalikan STATUS dari Restarting (127) x seconds ago.

Masalahnya adalah, saya dapat menghentikan penampung (saya menguji) tetapi memulainya lagi tampaknya membawanya kembali ke loop restart.

Tahu apa yang menjadi masalah di sini? Semuanya bekerja dengan baik sampai saya mencoba untuk memasangnya ...

Aku sedih :-(

Balessan
sumber
Saya berhasil dengan sepenuhnya menghapus seluruh cache Docker saya, menggunakan forums.docker.com/t/how-to-delete-cache/5753/2 (Saya juga menambahkan -f tag ke rmi). Kemudian saya membangun kembali kontainer saya dan mereka bekerja.
alberto56
Bagi saya, menghapus container dan gambar tidak cukup (seperti yang dijelaskan di link @ alberto56), saya juga harus menghapus volume terkait. Setelah saya melakukan itu, saya kembali berbisnis.
Katie Byers

Jawaban:

172

The docker logsperintah akan menunjukkan output wadah menghasilkan ketika Anda tidak menjalankannya secara interaktif. Ini mungkin termasuk pesan kesalahan.

docker logs --tail 50 --follow --timestamps mediawiki_web_1

Anda juga dapat menjalankan wadah baru di latar depan docker run -ti <your_wiki_image>untuk melihat fungsinya. Anda mungkin perlu memetakan beberapa konfigurasi dari docker-composeyml Anda ke dockerperintah.

Saya menduga bahwa melampirkan ke proses wiki media menyebabkan crash yang merusak sesuatu dalam data Anda.

Matt
sumber
Hasil dari perintah yang Anda berikan yang saya kira mendapatkan 50 log terakhir yang terkait dengan wadah adalah sebagai berikut 2016-05-26T16:38:27.362409489Z * Stopping web server apache2 * 2016-05-26T21:49:11.376549083Z Terminated 2016-05-26T21:49:11.688655642Z /bin/bash: /tmp/.runconfig.sh: No such file or directory:, jadi Anda benar, ada sesuatu yang rusak dalam data karena runconfig.sh tampaknya telah menghilang. Saya akan mencoba menjalankan wadah sekali lagi dari latar depan seperti yang Anda sarankan. Hanya perlu menemukan cara menentukan 25 argumen yang tepat ^^
Balessan
7
Terima kasih, menjalankan wadah baru berhasil. Docker seharusnya memudahkan penerapan saya, tetapi untuk sekarang ini adalah kegagalan besar :-) Saya mungkin perlu belajar dan mencoba lebih banyak ...
Balessan
Saya menarik rambut saya mencoba membuat MySQL berfungsi. docker ps -amenunjukkan kepada saya bahwa itu macet di loop boot dan perintah Anda menunjukkan kepada saya alasannya: file sudah ada di direktori mysql yang tidak dapat dihapus. Anda menyelamatkan saya dari berjam-jam menarik rambut saya keluar. Terima kasih!
Blizzardengle
32

Jika docker kill CONTAINER_IDtidak berfungsi dan docker stop -t 1 CONTAINER_IDjuga tidak berfungsi, Anda dapat mencoba menghapus penampung:

docker container rm CONTAINER_ID

Saya mengalami masalah serupa hari ini di mana kontainer berada dalam loop restart terus menerus.

Masalah dalam kasus saya terkait dengan saya sebagai insinyur yang buruk.

Bagaimanapun, saya memperbaiki masalah dengan menghapus penampung, memperbaiki kode saya, lalu membangun kembali dan menjalankan penampung.

Semoga ini membantu siapa pun yang terjebak dengan masalah ini di masa mendatang

Giannis Katsini
sumber
4
Saya telah memasukkan kode buruk di aplikasi saya dan di file tulis buruh pelabuhan saya menambahkan restart: alwaysyang membuat saya dalam lingkaran buruh pelabuhan mencoba memulai aplikasi yang rusak .. :(
Giannis Katsini
4

Dari pengalaman pribadi, sepertinya ada masalah dalam kontainer buruh pelabuhan Anda yang tidak memungkinkannya untuk dimulai ulang. Jadi beberapa proses dalam penampung menyebabkan mulai ulang macet atau beberapa proses menyebabkan penampung macet saat dimulai.

Saat Anda memulai penampung, pastikan Anda memulainya dengan melepaskan "-d" jika Anda akan melampirkannya. (mis. "docker run -d mediawiki_web_1")

iam10k
sumber
Saya berasumsi menjalankan container menggunakan docker-compose terlepas dari itu, bukan? Atau argumen -d tidak ada di file konfigurasi saya. akan memeriksanya.
Balessan
4

tl; dr Ini dimulai ulang dengan kode status 127, artinya ada file / pustaka yang hilang di penampung Anda. Memulai wadah baru mungkin bisa memperbaikinya.

Penjelasan:

Sejauh pemahaman saya tentang Docker, inilah yang terjadi:

  1. Penampung mencoba untuk memulai. Dalam prosesnya, ia mencoba mengakses file / pustaka yang tidak ada.
  2. Itu keluar dengan kode status 127, yang dijelaskan dalam jawaban ini .
  3. Biasanya, di sinilah wadah seharusnya benar-benar keluar, tetapi dimulai ulang.
  4. Ini dimulai ulang karena kebijakan mulai ulang harus disetel ke sesuatu selain no( default ), (baik menggunakan bendera baris perintah --restartatau docker-compose.ymlkunci restart) saat memulai penampung.

Solusi: Sesuatu mungkin telah merusak penampung Anda. Memulai wadah baru idealnya melakukan pekerjaan itu.

meshde
sumber
2

Ini juga bisa terjadi jika Anda telah membuat systemdlayanan yang memiliki:

[Service]
Restart=always
ExecStart=/usr/bin/docker container start -a my_container
ExecStop=/usr/bin/docker container stop -t 2 my_container
stephen
sumber
1

Dalam kasus saya, wadah nginx terus memulai ulang, saya memeriksa log wadah nginx dan mengetahui file .crt dan .key dari domain yang tidak diperlukan mengalami kesalahan, jadi saya menghapus masing-masing file .conf, .crt dan .key dan kemudian memulai ulang nginx. Itu saja nginx berfungsi dengan baik tanpa memulai ulang.

Lakshmi
sumber
0

Saya telah lupa Minikube berjalan di latar belakang dan itulah yang selalu memulai ulang mereka kembali

nuicca
sumber
0

Pertama periksa log mengapa penampung gagal. Karena kebijakan mulai ulang Anda mungkin membuat penampung Anda kembali ke status berjalan. Lebih baik memperbaiki masalah ini, Maka mungkin Anda dapat membuat gambar baru dengan / tanpa perbaikan. Kemudian jalankan perintah di bawah ini

docker system prune

https://forums.docker.com/t/docker-registry-in-restarting-1-status-forever/12717/3

Nagendran
sumber
0

Coba tambahkan parameter ini ke file yml buruh pelabuhan Anda

restart: "no"
  restart: always
  restart: on-failure
  restart: unless-stopped
  environment:
    POSTGRES_DB: "db_name"
    POSTGRES_HOST_AUTH_METHOD: "trust"

File terakhir akan terlihat seperti ini

postgres:
  restart: "no"
  restart: always
  restart: on-failure
  restart: unless-stopped
  image: postgres:latest
  volumes:
    - /data/postgresql:/var/lib/postgresql
  ports:
    - "5432:5432"
  environment:
    POSTGRES_DB: "db_name"
    POSTGRES_HOST_AUTH_METHOD: "trust"
Phillip Kigenyi
sumber