Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk mendapatkan kod keluar bekas Docker yang tidak berjalan

Bagaimana untuk mendapatkan kod keluar bekas Docker yang tidak berjalan

王林
王林ke hadapan
2024-02-13 12:00:101003semak imbas

如何获取未运行的 Docker 容器的退出代码

editor php Xiaoxin akan memperkenalkan anda cara mendapatkan kod keluar bekas Docker yang tidak berjalan. Apabila menggunakan Docker, kadangkala kita perlu melihat kod keluar bekas apabila ia keluar untuk menyelesaikan masalah atau nyahpepijat. Walau bagaimanapun, apabila bekas tidak berjalan, kami tidak boleh terus menggunakan arahan `docker logs` untuk mendapatkan kod keluar. Dalam artikel ini, kami akan memperkenalkan kaedah untuk mendapatkan kod keluar bekas Docker yang tidak berjalan untuk membantu anda menangani isu berkaitan kontena dengan lebih baik.

Kandungan soalan

Saya perlu mendapatkan kod keluar bekas yang berada dalam keadaan tidak berjalan. Saya tahu bekas itu tidak berjalan, saya mendapat maklumat ini daripada sumber yang berbeza.

Adakah terdapat cara dalam Docker's go SDK untuk mendapatkan kod keluar tanpa perlu menunggu bekas berada dalam keadaan tertentu? Sebagai contoh, apa yang ContainerWaitWaitResponse sediakan?

Adakah hanya memanggil ContainerWait dalam keadaan bekas saya tidak lagi wujud penyelesaian yang baik? Atau adakah penyelesaian yang lebih baik?

Saya amat berminat untuk mengelak ContainerWait kerana saya dapat melihat panggilan itu sangat mahal. Panggilan ke consting bagi setiap bekas mengambil masa kira-kira 10 milisaat jika keadaan bekas dihentikan dan 20 hingga 50 milisaat jika bekas berada dalam keadaan dimulakan semula.

Penyelesaian

Kod keluar terletak di containerstate 结构。这嵌入在 响应中的 <code>state 字段中(*client).containerinspect().

Contohnya:

func checkExitStatus(ctx context.Context, client *client.Client, containerID string) error {
  inspection, err := client.ContainerInspect(ctx, containerID)
  if err != nil {
    return err
  }

  // Possible values are listed in the `ContainerState` docs; there do not
  // seem to be named constants for these values.
  if inspection.State.Status != "exited" {
    return errors.New("container is not exited")
  }

  if inspection.State.ExitCode != 0 {
    return fmt.Errorf("container exited with status %d", inspection.State.ExitCode)
  }

  return nil
}

Atas ialah kandungan terperinci Bagaimana untuk mendapatkan kod keluar bekas Docker yang tidak berjalan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam