Cannot stop a docker container - docker

I am very new to docker. I am following a tutorial on it.
I can successfully build and run my docker container.
docker build .
docker run -p 3000:3000 3cd35580990c
But when I try to stop the container
docker stop ef485ea0dabd
Error response from daemon: cannot stop container: ef485ea0dabd: Cannot kill container ef485ea0dabda4939e7cc371408937174bf282a82e169c0fc71c2cf2b0b7bf74: unknown error after kill: runc did not terminate sucessfully: container_linux.go:392: signaling init process caused "permission denied"
: unknown
I got this long error about permission denied.
How can I solve this?

Your stop command is correct if you only want the container to stop. That won't remove the container though. To remove a stopped container you should use
docker container rm <id>
If the container is running (rather than stopped) you can force its removal using
docker container rm -f <id>
You can kill and remove all containers (running and stopped) using this command:
docker container rm -f $(docker ps -qa)
To see what containers you currently have you can use:
docker ps
But that only shows running containers. If you want to see stopped containers too you can do this:
docker ps -qa

Related

Docker ps prints empty list

How can I see the list of running containers?
sh-4.2$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
sh-4.2$ docker rm filebeat
Error response from daemon: You cannot remove a running container 998f73f25e997ba9838df85e8a83b05df9f2c713580ac3e183655c8241e4e84b. Stop the container before attempting removal or force remove
I thought docker ps did, but it shows an empty list.

How to ensure confirmed graceful exit of docker?

Docker sometimes exists but still keeps running.
Started with :
docker run -v $PWD:/host --rm -it Ubuntu_2018
After "exit" :
Docker container ls; docker container ls -al
This still shows container running
How to make sure that docker container is gracefully ended?
Using the option "--rm" and exiting the docker with "exit" should do the needful. But it still sometimes remains.
After exit, "docker container ls; docker container ls -al" should not show the docker at all
How to ensure confirmed graceful exit of docker?
Not by looking at the docker container ls -al output, which as commented shows the stopped containers.
But by looking at:
the logs of a stopped container, for an application message stating the stop was graceful (so that depends more on the containerized application, less on Docker itself).
its Exit status code: docker inspect -f '{{.State.ExitCode}}' <container SHA>
For that, see "Gracefully Stopping Docker Containers" by Brian DeHamer, who reminds us that When you use docker stop or docker kill to signal a container, that signal is sent only to the container process running as PID 1.
See also "Life and death of a container" from Luis Herrera Benítez who points out the existence of "docker inspect --format='{{.State.Health.Status}}' <containerName>": if it is unhealthy... chances are your subsequent stop might not be graceful.

Does Botium box requires docker container to be killed on every system start

I've read the command for docker kill. Now exactly how to stop
all containers or kill the container?
Should I navigate to the Docker folder in program files in cmd, or should I navigate to botium folder which I created for botium box in cmd? Currently I have Docker desktop version.
I'm getting the below error:
I restarted the Docker desktop app
Cmd : navigated to botium folder which I created for botium box
entered : docker-compose -f docker-compose-all.yml up
Error was thrown
C:\Users\Ram\Documents\Botium>docker-compose -f
docker-compose-all.yml up Starting botium_redis_1 ... botium_mysql_1
is up-to-date Starting botium_prisma_1 ... error
ERROR: for botium_prisma_1 Cannot start service prisma: driver failed
programming external connectivity on endpoint botStarting
botium_redis_1 ... error lready allocated
ERROR: for botium_redis_1 Cannot start service redis: driver failed
programming external connectivity on endpoint botium_redis_1
(023c3f7d0101a509a677a2f5434b00f25a8e4d3e238166eae6e0c1678b81035b):
Bind for 0.0.0.0:6379 failed: port is already allocated
ERROR: for prisma Cannot start service prisma: driver failed
programming external connectivity on endpoint botium_prisma_1
(1ad423ca349cd5d987a082407c64c8300e2822a0e4c3bf6a63c4369705f1413a):
Bind for 0.0.0.0:4466 failed: port is already allocated
ERROR: for redis Cannot start service redis: driver failed
programming external connectivity on endpoint botium_redis_1
(023c3f7d0101a509a677a2f5434b00f25a8e4d3e238166eae6e0c1678b81035b):
Bind for 0.0.0.0:6379 failed: port is already allocated ERROR:
Encountered errors while bringing up the project.
However when I retried the http://127.0.0.1:4000/quickstart a couple of times
the botium box opened. But initially this was not opening.
You don't have to navigate.
If you run using docker-compose, you can go to the directory where your docker-compose.yml file is located and run docker-compose down.
Without docker-compose, you have to run docker ps to list all currently running containers and find the name of the container to kill. You can use the CONTAINER ID or the NAMES. Then run docker kill <container name>.
Example:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
myId myimage:2.5 "/opt/command/ba…" 24 hours ago Up About an hour 0.0.0.0:9000->9000/tcp very_cool_name_1
$ docker kill very_cool_name_1
very_cool_name_1
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$
Just type below commands when you open your Powershell or Bash.
To stop all running containers:
docker stop $(docker ps -q)
To remove all containers:
docker rm $(docker ps -qa)
Please note that rm will just remove your container not the Docker image. If your want to delete an image then you can use: docker rmi -f container_id

Docker ps shows running container that I cannot stop or kill. How to stop/kill that container?

"Docker p"s shows 1 running container. The command "docker ps --filter status=running" shows the same process.
When trying to stop the container, I get the identification but nothing happens. The container is still running.
When I performing a 'docker kill id' I get:
Error response from daemon: Cannot kill container: xyz: Container
2f-etc is not running
I cannot perform a 'docker container rm name' because of this message:
Error response from daemon: driver "overlay2" failed to remove root
filesystem for
2f-etc:
remove
/var/lib/docker/overlay2/0877e30fd3a98f46b981827b52aec02a7004649e2a9c01c72e38cc8de5b309b0/diff/tmp/hsperfdata_root/5:
read-only file system
How to stop / kill that container?
What do I know more:
It may be that I stopped my computer without stopping the container. I will take care ;-)
I noticed also that creating a new image with 'docker build -t newname .' is failing because: Error response from daemon: mkdir /var/lib/docker/tmp/docker-builder471922504: read-only file system
Restart docker is simple but global solution. In my case I needed to keep other containers working without stop and the solution of #juanlumn helped me, which is docker container rm -f name (it removes container).
As #Aderemi Dayo suggested - a restart of the Docker machine suffices.
Sometimes docker restart doesn't work, so you may have to individually run docker stop & docker start. Thereafter use the docker container rm <container> command to remove.

How do I kill the docker processes?

I have tried
docker kill name_of_the_process
But the error is
Error response from daemon: Cannot kill container: name_of_the_container: Container name_of_the_container is not running
There are a lot of processes when I run docker ps -a, how do I kill those, they are stopped but not killed
A stopped container is killed. There is no running process, but there is a writable container specific filesystem and some metadata remaining which allows you to debug the stopped container and restart it. To remove that, use docker container rm (or the former alias docker rm) to remove the stopped container data. e.g.
docker container ls -aqf status=exited | xargs docker container rm
docker ps Shows you the running containers. If you add the -a flag it will print out all the containers, even the ones not running.
You can not "stop" a non-running container, it is already stopped.
You can find more information here: https://docs.docker.com/engine/reference/commandline/ps/
If you wish to remove the container, you can remove it by id or name. The command for that is docker rm <id/name>
Tip: You can use the first few chars of the id to identify the container, you don't need the whole id

Resources