docker ps shows empty list - although docker telling container exists - docker

when calling docker ps the list is empty, although I got an id:
(dcbb6aeaa06ba43fcb.....)
My steps:
Step 1: I created an image (imagekommando) of an running js.file:
Step 2: I created a container (in background) based on my image
docker run -d --name containerkommando imagekommando
I got an id! (container-id??)
Step 3: But docker ps shows empty list:
But when I repeat Step 2, I'm told, that the container (containerkommando) already exists:
docker run -d --name containerkommando imagekommando
Could you help me, understanding the logic behind?
And how can I get the container running (by ID)?

That means that the docker container exited with an error but clean up is required. With --rm option you can tell the docker to remove the container when the container has exited.
docker run --rm .....
Also to check the reason for the container exiting...you can use
docker logs <container_id>

What probably takes place here:
docker run ... creates and starts your container
your container exits
docker ps doesn't list stopped containers (default shows just running), so it made you think that it's not there.
docker run ... fails because you are trying to create and run a container with a name that already exists.
Further reading:
What are the possible states for a docker container?
Why docker container exits immediately

In Docker, a container is automatically exited when the task is finished. You have to specify a correct entrypoint to keep your docker container up.
You can check the exited containers with the command docker ps -a. This exited container will prevent you from using the name again.
So, you may want to use docker rm <container-name> before creating your new container. In a test environement, you can also use docker system prune to clean all unused container/networks.

docker ps only shows the active containers (the running ones).
Your container most probably exited right after you started it. You can use the container ID and do docker logs <container-id> to examine the reason why the container failed.
If you want to see the stopped containers together with the running containers you can do docker ps -a to get a list of all these.

Execute
docker logs <CONTAINER ID>
to view the logs of docker container run.
I faced a similar issue found out there was space issue win my docker. After clearing space the container was able to run.

Related

How to start an existing image as container so it runs in the background [duplicate]

Running the docker registry with below command always throws an error:
dev:tmp me$ docker run \
-d --name registry-v1 \
-e SETTINGS_FLAVOR=local \
-e STORAGE_PATH=/registry \
-e SEARCH_BACKEND=sqlalchemy \
-e LOGLEVEL=DEBUG \
-p 5000:5000 \
registry:0.9.1
Error response from daemon: Conflict. The name "registry-v1" is already in use by container f9e5798a82e0. You have to delete (or rename) that container to be able to reuse that name.
How can I prevent this error ?
I got confused by this also. There are two commands relevant here:
docker run # Run a command in a **new** container
docker start # Start one or more stopped containers
That means you have already started a container in the past with the parameter
docker run --name registry-v1 ...
You need to delete that first before you can re-create a container with the same name with
docker rm registry-v1
When that container is sill running you need to stop it first before you can delete it with
docker stop registry-v1
Or simply choose a different name for the new container.
To get a list of existing containers and their names simply invoke
docker ps -a
Here what i did, it works fine.
step 1:(it lists docker container with its name)
docker ps -a
step 2:
docker rm name_of_the_docker_container
When you are building a new image you often want to run a new container each time and with the same name. I found the easiest way was to start the container with the --rm option:
--rm Automatically remove the container when it exits
e.g.
docker run --name my-micro-service --rm <image>
Sadly it's used almost randomly in the examples from the docs
Edit: Read Lepe's comment below.
Just to explain what others are saying (it took me some time to understand) is that, simply put, when you see this error, it means you already have a container and what you have to do is run it. While intuitively docker run is supposed to run it, it doesn't. The command docker run is used to only START a container for the very first time. To run an existing container what you need is docker start $container-name. So much for asking developers to create meaningful/intuitive commands.
You have 2 options to fix this...
Remove previous container using that name, with the command docker rm $(docker ps -aq --filter name=myContainerName)
OR
Rename current container to a different name i.e change this portion --name registry-v1 to something like --name myAnotherContainerName
You are getting this error because that container name ( i.e registry-v1) was used by another container in the past...even though that container may have exited i.e (currently not in use).
Cause
A container with the same name is still existing.
Solution
To reuse the same container name, delete the existing container by:
docker rm <container name>
Explanation
Containers can exist in following states, during which the container name can't be used for another container:
created
restarting
running
paused
exited
dead
You can see containers in running state by using :
docker ps
To show containers in all states and find out if a container name is taken, use:
docker ps -a
Here is how I solved this on ubuntu 18:
$ sudo docker ps -a
copy the container ID
For each container do:
$ sudo docker stop container_ID
$ sudo docker rm container_ID
removing all the exited containers
docker rm $(docker ps -a -f status=exited -q)
The Problem: you trying to create new container while in background container with same name is running and this situation causes conflicts.
The error would be like:
Cannot create continer for service X :Conflict. The name X is already in use by container abc123xyz. You have to remove ot delete (or rename) that container to be able to reuse that name.
Solution rename the service name in docker-compose.yml or delete the running container and rebuild it again (this solution related to Unix/Linux/macOS systems):
get all running containers sudo docker ps -a
get the specific container id
stop and remove the duplicated container / force remove it
sudo docker stop <container_id>
sudo docker rm <container_id>
or
sudo docker rm --force <container_id>
You can remove it with command sudo docker rm YOUR_CONTAINER_ID, then run a new container with sudo docker run ...;
or restart an existing container with sudo docker start YOUR_CONTAINER_ID
I was running into this issue that when I run docker rm (which usually works) I would get:
Error: No such image
The easiest solution to this is removing all stopped containers by running:
docker container prune
I have solved the issue by doing following steps and I hope it helps.
Type docker ps -a to list all the containers in your system.
Check the NAMES part where you have initialized your docker container.
Then type docker rm --force name_of_container
Install the docker container as you wish.
I had problem using NIFI and I have removed and reinstalled using docker. Good luck.
TL:DR;
List all containers:
docker ps -a
Remove the concerned container by id:
docker container rm <container_id>
I'm just learning docker and this got me as well. I stopped the container with that name already and therefore I thought I could run a new container with that name.
Not the case. Just because the container is stopped, doesn't mean it can't be started again, and it keeps all the same parameters that it was created with (including the name).
when I ran docker ps -a that's when I saw all the dummy test containers I created while I was playing around.
No problem, since I don't want those any more I just did docker rm containername at which point my new container was allowed to run with the old name.
Ah, and now that I finish writing this answer, I see Slawosz's comment on Walt Howard's answer above suggesting the use of docker ps -a
The OP's problem is the error. Deleting state isn't the only solution - or even a good one. The problem is docker run isn't re-entrant, and docker start is impotent w/o run. So we have to combine them.
For example to run Postgres w/o destroying previous state, try this:
docker start postgres || docker run -d -p 5432:5432 --name postgres -e POSTGRES_PASSWORD=password postgres:13-alpine
Ok, so I didn't understand either, then I left my pc, went to do other things, and upon my return, it clicked :D
You download a docker image file. docker pull *image-name* will just pull the image from docker hub without running it.
Now, you use docker run, and give it a name (e.g. newWebServer).
docker run -d -p 8080:8080 -v volume --name newWebServer image-name/version
You perhaps only need docker run --name *name* *image*, but the other stuff will become useful quickly.
-d (detached) - means the container will exit when the root process used to run the container exits.
-p (port) - specify the container port and the host port. Kind of the internal and external port. The internal one being the port the container uses, and the external one is the port you use outside of it and probably the one you need to put in your web browser if that's how you access your app.
--name (what you want to call this instance of the container) - you could have several instances of the same container all with different names, which is useful when you're trying to test something.
image-name/version is the actual image you want to create the container from. You can see a list of all the images on your system with docker images -a. You may have more than one version, so make sure you choose the correct one/tag.
-v (volume) - perhaps not needed initially, but soon you'll want to persist data after your container exits.
OK. So now, docker run just created a container from your image. If it isn't running, you can now start it with it's name:
docker start newWebServer
You can check all your containers (they may or may not be running) with
docker ps -a
You can stop and start them (or pause them) with their name or the container id (or just the first few characters of it) from the CONTAINER ID column e.g:
docker stop newWebServer
docker start c3028a89462c
And list all your images, with
docker images -a
In a nutshell, download an image; docker run creates a container from it; start it with docker start (name or container id); stop it with docker stop (name or container id).
I had this issue because I had two or more containers with the same container_name in the docker-compose.yml file.
Simple Solution: Goto your docker folder in the system and delete .raw file or docker archive with large size.
For me, the issue was that I used an image name more than once in the dockerfile.
This happened to me on the docker tutorial! The port I tried to use was taken, but docker still created.. an image? A process to run docker? I'll find out soon. Anyways, to choose a different port, I had to remove the older image, and then docker run again.
Sometimes a tutorial can be too terse. What you want is concise, not terse, or even succinct.

The docker container does not run in detached mode

When I run my docker container in detached mode by using the following command
docker run -d -p 5000:5000 --name tmp-cntr --net="host" -v /home/project:/root/ IMAGE-NAME
it does not appear when I list the containers by
docker ps
When I list all the containers by
docker ps -a
I can see that the container has exited. However, if I try to run the container with the same name it gives following error.
docker: Error response from daemon: Conflict. The container name "/tmp-cntr" is already in use by container "4b7cf4084685ad7fcaeef3ca6a07ca594752c42cbfd6eb07850d7fe8f5289bc3". You have to remove (or rename) that container to be able to reuse that name.
Is the container running or has it exited? What is the problem in my command? Please be kind enough to point out my mistake and explain how this can be corrected.
I appreciate your help.
It means the container created but exited, There maybe something wrong with your entrypoint that the container can't start successfully.
please have a check with docker logs <container-id> to show what's wrong.
Since you can't re-run, it means it's in Exited status.
You should run docker logs tmp-cntr to see what's wrong with the current exited container and then docker rm tmp-cntr to remove it.
Also you can remove --name tmp-cntr from your docker run command to prevent the same name issues instead of removing it every time, so debug it better.

Container not starting

I made a docker container of my web application.
At the end of the docker build command, I saw (which I suppose means that image was made)
Successfully tagged App:30may2020
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.
When I run the container, I get error
docker run --publish 9000:9000 --detach --name App App:30may2020
docker: Error response from daemon: Conflict. The container name "/App" is already in use by container "8a641431369c418e99ccb752161f5f2848d3c8f14bb903a18b6bd4aff2966af6". You have to remove (or rename) that container to be able to reuse that name.
Question 1 - Does build command also starts the container as I didn't start the container?
Question 2 - I did docker container ls and docker container ps but I don't see my container running. Then why do I get the error?
Answers to your questions:
Question 1 - Does build command also starts the container as I didn't start the container?
Answer => No, but the command which you mentioned is a run command which will start the container.
docker run --publish 9000:9000 --detach --name App App:30may2020
As you can see, docker run will start the container from the image App:30may2020.
Question 2 - I did docker container ls and docker container ps but I don't see my container running. Then why do I get the error?
Answer2 => As the error says, App container name is already used by another container. There are below 2 ways to solve this
Run docker rm App, which will remove the container named App and if you want to see this container running run docker ps -a, and you would be able to see the container.
Note:- If you encounter an error while deleting the container, please stop the container first by running docker stop App.
The second way, don't give --name option while running the container and let docker choose the random name.
If docker ps shows nothing, then you must already have a stopped container called App. When a container stops, it remains, so that it can be started again.
As commented above docker ps -a will show all containers both running and stopped.
To remove the stopped container, use docker rm App.
It's a good idea when manually running containers, especially whilst debugging (so you're going to stop and start many times) to use the --rm flag. This will ensure that the container is removed when it's stopped.
Question1 answer: build doesn't starts a container
Question 2 answer: ps and ls display the container which are currently running but not those containers which are stopped. Do docker ps -a Incase if you want to view stopped containers.
You are getting the error because you have already a container with the name '/App' try to run a container with a different name.
Or in case if you want to run container with same name but want to use from new build you should first stop and delete the container and you can run under a same name

Docker hello-world container not visible with docker ps command

I succefully ran hello-world using docker run command , but when I check running containers with docker ps , this container was not visble under running containers ,
Any suggestions
Thank
Rajendar
The default hello-world image from docker has no extra service running inside it so therefore exits after printing the default text. As such you cannot view it using docker ps which is command for viewing currently running containers.
To view running/stopped containers, run docker ps -a
See the image on how the docker ps and docker ps -a command show different results for the `hello-world image.
How did you run it? If I remember correctly, the hello world example just echos and quits, so running docker ps immediately afterwards won't show you anything.
Try this instead:
docker ps -n 1
That will essentially show you the most recent container you ran and its state.
Just for fun, if you really want to watch the hello-world execution at runtime...
Open up a new terminal window and run the command docker events, then keep watching what happens when you run docker run hello-world in your original terminal window.
Magically, you will see your entire container life-cycle below:
1.container create (notice the funny name= attribute of your ephemeral container name)
2.image pull
3.container init
4.container start
5.container attach
6.container died
7.container cleanup
Enjoy!

Can I restart a docker container listed in the docker ps -a output?

The first time I ran my configured image, I passed in a --name option. After running the image, I stopped it. Now, it appears in the docker ps output:
vagrant#precise64:~/docker$ docker ps -a
Since it has a name, how can I restart it? It seems that the docker run command only accepts an imageid (not a containerid). And if run it again, a new container is created (which is not what I want).
To start a stopped container one could issue
docker start {name}

Resources