I have created a container locally. Then, I run the following command:
docker ps -a
output is:
ONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abc6f4d50931 airflow "/bin/zsh" 17 hours ago Exited (137) 21 minutes ago xenodochial_mclaren
Then I try to run the container with the following command, it create a new container with same IMAGE but different container ID instead opening the container with this image name which exist.
docker run -p 8080:8080 -it airflow /bin/zsh/
The output of docker images command is:
REPOSITORY TAG IMAGE ID CREATED SIZE
airflow airflow 63e2e36735a6 46 hours ago 704MB
airflow latest 63e2e36735a6 46 hours ago 704MB
docker/getting-started latest 083d7564d904 6 weeks ago 28MB
Why is this creating new containers?
If you run docker run ... you spin out a new cointainer from the image.
The status of your container is Exited as you can check from the docker ps -a output.
If you want to start again the same container, you can try docker start abc6f4d50931.
Related
I run docker ps and it shows that 5 containers that have been running for three weeks.
I then run docker-compose down but when I run docker ps again, they are all still running.
I have tried the following command but none seems to work
kill
stop
down --rmi local
rm
down
How can I stop these? I tried just bringing up my new docker-compose.yml and ignoring the olde one but I get:
ERROR: for apache Cannot create container for service apache: Conflict. The container name "/apache" is already in use by container "70c570d60e1248292f279a37634fd8b4ce7e2535d2bfa14b2c6e4089652c0152". You have to remove (or rename) that container to be able to reuse that name.
What to try to stop the old container?
You can list containers:
(base) docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c788727f0f7b postgres:14 "docker-entrypoint.s…" 7 days ago Up 7 days 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp dev-db
88e8ddcb7d4e redis "docker-entrypoint.s…" 7 days ago Up 7 days 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp beautiful_neumann
Delete container:
(base) docker rm -f c788727f0f7b # container_id
c788727f0f7b
List containers:
(base) docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
88e8ddcb7d4e redis "docker-entrypoint.s…" 7 days ago Up 7 days 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp beautiful_neumann
As you can see the container got stopped(c788727f0f7b).
You can list stopped containers using:
docker container ls -f 'status=exited'
I tried to start a container output as follows,
I have listed all available containers using docker ps --all.
[root#sdctlt0048 express_edition]# docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ceb4b5256c32 store/saplabs/hanaexpress:2.00.045.00.20200121.1 "/run_hana --passwor…" 6 hours ago Exited (1) 3 hours ago express_edition
7d838bf619df 389fef711851 "echo hello" 4 days ago Exited (0) 4 days ago helloWorld
b743cad7815f portainer/portainer-ce "/portainer" 2 weeks ago Up 2 weeks 0.0.0.0:8000->8000/tcp, 0.0.0.0:9000->9000/tcp portainer
47cc21a338dd portainer/portainer "/portainer" 2 weeks ago Exited (1) 2 weeks ago youthful_maxwell
97e277d42155 hello-world "/hello" 2 weeks ago Exited (0) 2 weeks ago confident_roentgen
I entered the following commands to start the container which is in the exit stage and enter the terminal of this image.
docker start ceb4b5256c32
docker exec -it ceb4b5256c32 bach
It throws the following error.
FATA [0000] Error response from daemon: Container ceb4b5256c32 is not running
But when I start the container using docker start ceb4b5256c32. It throws the container ID out, which is okay if everything is working normally. I am not sure what caused this error.
for my docker run i was created a script where I put all my commands as follows:
Any idea on the causes and suggestions on this would be very helpful to me.
many Thank in advance.
Mb the container has already stopped when you want to execute the command?
Check if conatainer have a status Exited and logs
docker ps | grep ceb4b5256c32
docker logs ceb4b5256c32 --tail 5
If the container always stops and this is normal then try it (--rm - remove container after stopped):
docker run --rm -it <image:name> <command>
Eg:
# ~ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# ~ docker run --rm -it debian bash
root#22ce8b31b68c:/# exit
exit
# ~ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# ~
Using an image from https://hub.docker.com/_/php.
Create and launch a hogehoge-php container with docker run -dti
% docker run -dti --name hogehoge-php php
Then I can see that the hogehoge-php container is up and running.
confirmed:
% docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2c9e7ff1a952 php "docker-php-entrypoi..." 6 seconds ago Up 5 seconds ago hogehoge-php
try with pull, create and start
I read that the docker run is a command that performs docker pull, docker create, and docker start all at once. So I decided to try it out as follows (I didn't do the docker pull because I already have a local php image).
% docker create --name foofoo-php php
c7687c088dda9b71d9380e9ca472afa436ac63785c1d2c195b8a08147f8adec9
% docker start foofoo-php
foofoo-php
% docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c7687c088dda php "docker-php-entrypoi..." 16 seconds ago Exited (0) 3 seconds ago foofoo-php
When I tried as above, I got Exited (0) 3 seconds ago, and the foofoo-php container created by docker create doesn't stand up all the time.
The foofoo-php container made by docker create doesn't stand up(options not available).
% docker start -dti foofoo-php
unknown shorthand flag: 'd' in -dti
See 'docker start --help'.
The i option is available, and I was able to run it, but it doesn't leave the docker running.
% docker start -i foofoo-php
Interactive shell
% docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c7687c088dda php "docker-php-entrypoi..." 3 minutes ago Exited (0) 5 seconds ago foofoo-php
How can I create and start instead of run -dti?
By the way, I tried docker run without -dti
By the way, I tried docker run without -dti.
% docker run --name barbarbar-php php
Interactive shell
% docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6215c71a13a4 php "docker-php-entrypoi..." 15 seconds ago Exited (0) 15 seconds ago barbar-php
The container was created, but it's not standing up. I thought I should try docker start:
% docker start barbar-php
barbar-php
% docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6215c71a13a4 php "docker-php-entrypoi…" 33 seconds ago Exited (0) 3 seconds ago barbar-php
but the container doesn't start up.
On the other hand, stop and start a container created by docker run -dti
On the other hand, try to stop and start a container created by docker run -dti, it running up after start.
% docker stop hogehoge-php
hogehoge-php
% docker start hogehoge-php
hogehoge-php
% docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6215c71a13a4 php "docker-php-entrypoi…" 4 minutes ago Exited (0) About a minute ago barbar-php
c7687c088dda php "docker-php-entrypoi…" 11 minutes ago Exited (0) 8 minutes ago foofoo-php
2c9e7ff1a952 php "docker-php-entrypoi…" 14 minutes ago Up 2 seconds hogehoge-php <----- Here
Behavior Summary
docker run
with dit option
up after a run
up after start
without dit option
not up after a run
not up after a start
docker create
not up after a run
What you are missing is a docker create -t to allocate a pseudo-TTY for you container.
Since the entrypoint for the image you are running is a php shell running at the foreground, the container, when started, figures out that it doesn't have a tty to attach to an exit with 0.
docker pull php
docker create -t --name hogehoge-php php
docker start hogehoge-php
In scenario 1 and 3, two docker containers are running. But in scenario 2, when I start the container with same container ID(twice), I see only one container running. What is the logic/reason behind this?(I was expecting two instances to be running)
SCENARIO 1:
$ docker create busybox ping www.google.com
163a5907dcfd7f37be0debb1153f0307a962a7709aa6c418ddab1f833a3bc4b8
$ docker create busybox ping www.google.com
178c343d16fe7930b78532d234e735f203cad6a7fa3d932d12c71a433922c2b2
$ docker start 163a5907dcfd7f37be0debb1153f0307a962a7709aa6c418ddab1f833a3bc4b8
163a5907dcfd7f37be0debb1153f0307a962a7709aa6c418ddab1f833a3bc4b8
$ docker start 178c343d16fe7930b78532d234e735f203cad6a7fa3d932d12c71a433922c2b2
178c343d16fe7930b78532d234e735f203cad6a7fa3d932d12c71a433922c2b2
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
178c343d16fe busybox "ping www.google.com" About a minute ago Up 11 seconds jovial_maxwell
163a5907dcfd busybox "ping www.google.com" About a minute ago Up 3 seconds relaxed_hofstadter
SCENARIO 2:
$ docker start 163a5907dcfd7f37be0debb1153f0307a962a7709aa6c418ddab1f833a3bc4b8
$ docker start 163a5907dcfd7f37be0debb1153f0307a962a7709aa6c418ddab1f833a3bc4b8
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
163a5907dcfd busybox "ping www.google.com" 3 minutes ago Up 4 seconds relaxed_hofstadter
SCENARIO 3:
$ docker run busybox ping www.google.com
$ docker run busybox ping www.google.com
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a0880fa44941 busybox "ping www.google.com" 6 seconds ago Up 6 seconds xenodochial_bohr
df85aab07d43 busybox "ping www.google.com" 13 seconds ago Up 13 seconds trusting_keldysh
When you run docker create or docker run, a container is created from the given image, it is assigned a unique ID, and that container is run. Thus, if you run the same command twice, you get two containers, each with distinct ID, for the same image and you can run them separately.
When you start a container by its ID, the command applies to that particular container. When you restart it, it will not do anything because that container is already running.
Imaging following scenario everyone can stack in production:
we are running Elastic search as docker containers, indexing some
data we would like to backup data every 3 months
means we need to
create docker image from running container and upload it to registry.
Haven't found any clues how to do that in documentation.
With the swarm orchestration, your individual containers/tasks inside of the service may be restarted (e.g. if you have a node failure or your application crashes). For persistent data, I'd use an external volume and backup that volume directly. If you want to do this in swarm, you can commit the containers it creates by locating the specific container and committing it with the standard commands:
$ docker service create --name test-commit busybox /bin/sh -c 'while true; do ls / >/tmp/ls.`date +%T`.log; sleep 30; done'
2vbnf5s39vs0jfc53at3ko1cg
$ docker service ls
ID NAME REPLICAS IMAGE COMMAND
2vbnf5s39vs0 test-commit 1/1 busybox /bin/sh -c while true; do ls / >/tmp/ls.`date +%T`.log; sleep 30; done
$ docker service ps test-commit
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
eu28da042s9tdwlddzk6adkan test-commit.1 busybox docker-demo Running Running 9 seconds ago
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
545e7fe6f5bd busybox:latest "/bin/sh -c 'while tr" 28 seconds ago Up 26 seconds test-commit.1.eu28da042s9tdwlddzk6adkan
$ docker diff test-commit.1.eu28da042s9tdwlddzk6adkan
C /tmp
A /tmp/ls.12:02:13.log
A /tmp/ls.12:02:43.log
$ docker commit test-commit.1.eu28da042s9tdwlddzk6adkan
test-commit:1
sha256:2255b476b307b69cf20afbc7c46fae43f05c92a70f1525aa5d745c26a406dc90
$ docker images | grep test-commit
test-commit 1 2255b476b307 9 seconds ago 1.093 MB
You can use docker commit to turn a container into an image.
But I would advise against doing that in this case. It's better to use some kind of volume for your data and back that up separately.