After building a Docker image from a dockerfile
, I see the image was built successfully, but what do I do with it? Shouldn't i be able to run it as a container?
This question is related to
docker
docker-image
Get the name or id of the image you would like to run, with this command:
docker images
The Docker run command is used in the following way:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Below I have included the dispatch, name, publish, volume and restart options before specifying the image name or id:
docker run -d --name container-name -p localhost:80:80 -v $HOME/myContainer/configDir:/myImage/configDir --restart=always image-name
Where:
--detach , -d Run container in background and print container ID
--name Assign a name to the container
--publish , -p Publish a container’s port(s) to the host
--volume , -v Bind mount a volume
--restart Restart policy to apply when a container exits
For more information, please check out the official Docker run reference.
Do the following steps:
$ docker images
You will get a list of all local Docker images with the tags specified.
$ docker run image_name:tag_name
If you didn't specify tag_name
it will automatically run an image with the 'latest' tag.
Instead of image_name
, you can also specify an image ID (no tag_name).
Here is an example to run a webdev service in Docker. The image's name is morrisjobke/webdav. You can pull it from Docker Hub.
After you run these images, you can then access the WebDAV instance at http://localhost:8888/webdav
. Internally the folder /var/webdav
is used as the WebDAV root.
You can run this container in the following way:
$ docker run -d -e USERNAME=test -e PASSWORD=test -p 8888:80 morrisjobke/webdav
To list the Docker images
$ docker images
If your application wants to run in with port 80, and you can expose a different port to bind locally, say 8080:
$ docker run -d --restart=always -p 8080:80 image_name:version
I had the same problem. I ran my Docker image, and it created a container with a specific CONTAINER_ID. I wanted to work with the same container:
First run your Docker image:
docker run -it -p 8888:8888 -p 6006:6006 -v ~/:/host waleedka/modern-deep-learning
Then list all the containers you have made:
sudo docker ps -a
And select the container you want to work with (mine is 167ddd6d7f15):
sudo docker start -ai 167ddd6d7f15
$ docker images
REPOSITORY TAG IMAGE ID CREATED
jamesmedice/marketplace latest e78c49b5f380 2 days ago
jamesmedice/marketplace v1.0.0 *e78c49b5f380* 2 days ago
$ docker run -p 6001:8585 *e78c49b5f380*
For those who had the same problem as well, but encountered an error like
rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process caused "exec: \"bash\": executable file not found in $PATH"
I added an entry point that was worked for me:
docker run -it --entrypoint /bin/sh
for the images without Bash.
Example (from the approved example):
run -it --entrypoint /bin/sh ubuntu:12.04
Reference: https://gist.github.com/mitchwongho/11266726
To view a list of all images on your Docker host, run:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
apache_snapshot latest 13037686eac3 22 seconds ago 249MB
ubuntu latest 00fd29ccc6f1 3 weeks ago 111MB
Now you can run the Docker image as a container in interactive mode:
$ docker run -it apache_snapshot /bin/bash
OR if you don't have any images locally,Search Docker Hub for an image to download:
$ docker search ubuntu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian... 6759 [OK]
dorowu/ubuntu-desktop-lxde-vnc Ubuntu with openss... 141 [OK]
rastasheep/ubuntu-sshd Dockerized SSH ser... 114 [OK]
ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS w... 88 [OK]
ubuntu-upstart Upstart is an even... 80 [OK]
Pull the Docker image from a repository with the docker pull command:
$ docker pull ubuntu
Run the Docker image as a container:
$ docker run -it ubuntu /bin/bash
You can see your available images using:
docker images
Then you can run in detached mode so your terminal is still usable. You have several options to run it using a repository name (with or without a tag) or image ID:
docker run -d repository
docker run -d repository:tag
docker run -d image_id
Then you can check your container is running using
docker ps
docker ps
gives you a container ID. You can use it or just the 2/3 first characters to go into your container using:
docker exec -it container_id /bin/bash
And you can stop it using docker stop container_id
and docker rm container_id
.
You can also run your container with -rm
arguments so if you stop your container it will automatically be removed.
Since you have created an image from the Dockerfile, the image currently is not in active state. In order to work you need to run this image inside a container.
The $ docker images
command describes how many images are currently available in the local repository.
and
docker ps -a
shows how many containers are currently available, i.e. the list of active and exited containers.
There are two ways to run the image in the container:
$ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
In detached mode:
-d=false: Detached mode: Run container in the background, print new container id
In interactive mode:
-i :Keep STDIN open even if not attached
Here is the Docker run command
$ docker run image_name:tag_name
For more clarification on Docker run, you can visit Docker run reference.
It's the best material to understand Docker.
Source: Stackoverflow.com