Home  >  Article  >  Backend Development  >  How to get the exit code of a non-running Docker container

How to get the exit code of a non-running Docker container

王林
王林forward
2024-02-13 12:00:10936browse

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

php editor Xiaoxin introduces you how to get the exit code of a Docker container that is not running. When using Docker, sometimes we need to view the exit code of the container when it exits for troubleshooting or debugging. However, when the container is not running, we cannot directly use the `docker logs` command to get the exit code. In this article, we will introduce a method to get the exit code of a non-running Docker container to help you better deal with container-related issues.

Question content

I need to get the exit code of a container that is in a non-running state. I know the container is not running, I am getting this information from different sources.

Is there a way in Docker's go SDK to get the exit code without having to wait for the container to be in a certain state? For example, what does WaitResponse of ContainerWait provide?

Is it a good solution to simply call ContainerWait when my container no longer exists? Or is there a better solution?

I'm particularly interested in avoiding ContainerWait because I can see that call being very expensive. Each container call to consting takes approximately 10 milliseconds if the container's state is stopped, and 20 to 50 milliseconds if the container is restarted.

Solution

The exit code is located in the containerstate structure. This is embedded in the state field in the <code> response(*client).containerinspect().

For example:

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
}

The above is the detailed content of How to get the exit code of a non-running Docker container. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete