mjs
mjs

Reputation: 22399

Docker keeping CMD alive to exec for inspect. sleep not suitable, ping not avail by default

  CMD ['sleep', 100000] 

gets stuck and becomes unresponsive for ctrl + c.

Any suggestions?

The issue is when the CMD is not running properly, it is usually easier to exec --it into the server and do those things manually to get them up and running properly.

Without a CMD, run will exit, and therefore exec won't be possible.

I've used sleep for this, but i saw a ping, but ping is not default in ubuntu 18, and perhaps there are better ways than installing it for this simple purpose.

Upvotes: 0

Views: 2195

Answers (1)

David Maze
David Maze

Reputation: 159865

You can provide an alternate command when you run the image. That can be anything you want -- a debugging command, an interactive shell, an alternate process.

docker run --rm myimage ls -l /app
docker run --rm -it myimage bash
# If you're using Compose
docker-compose run myservice bash

This generally gets around the need to "keep the container alive" so that you can docker exec into it. Say you have a container command that doesn't work right:

CMD ["my_command", "--crash"]

Without modifying the Dockerfile, you can run an interactive shell as above. When you get a shell prompt, you can run my_command --crash, and when it crashes, you can look around at what got left behind in the filesystem.

It's important that CMD be a complete command for this to work. If you have an ENTRYPOINT, it needs to use the JSON-array syntax and it needs to run the command that gets passed to it as command line parameters (often, it's a shell script that ends in exec "$@").

Upvotes: 2

Related Questions