从 dockerfile
构建 Docker 映像后,我看到映像已成功构建,但我该如何处理它?我不应该能够将它作为容器运行吗?
运行它的具体方式取决于你是否给图像一个标签/名称。
$ docker images
REPOSITORY TAG ID CREATED SIZE
ubuntu 12.04 8dbd9e392a96 4 months ago 131.5 MB (virtual 131.5 MB)
有一个名字(让我们使用 Ubuntu):
$ docker run -i -t ubuntu:12.04 /bin/bash
没有名字,只使用 ID:
$ docker run -i -t 8dbd9e392a96 /bin/bash
请参阅 Docker run reference 了解更多信息。
执行以下步骤:
$ docker images 你会得到一个带有指定标签的所有本地 Docker 镜像的列表。 $ docker run image_name:tag_name 如果你没有指定 tag_name 它将自动运行一个带有“最新”标签的图像。除了 image_name,您还可以指定图像 ID(无 tag_name)。
列出 Docker 镜像 $ docker images
如果您的应用程序想要使用端口 80 运行,并且您可以公开不同的端口以在本地绑定,例如 8080: $ docker run -d --restart=always -p 8080:80 image_name:version
--restart=always
选项应始终作为规则使用。
您可以使用以下方式查看可用图像:
docker images
然后你可以在分离模式下运行,这样你的终端仍然可以使用。您有几个选项可以使用存储库名称(带或不带标签)或图像 ID 来运行它:
docker run -d repository
docker run -d repository:tag
docker run -d image_id
然后你可以检查你的容器正在运行使用
docker ps
docker ps
为您提供容器 ID。您可以使用它或仅使用前 2/3 个字符进入您的容器:
docker exec -it container_id /bin/bash
您可以使用 docker stop container_id
和 docker rm container_id
停止它。
您还可以使用 -rm
参数运行容器,因此如果您停止容器,它将自动被移除。
使用以下命令获取您要运行的图像的名称或 ID:
docker images
Docker 运行命令的使用方式如下:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
下面我在指定图像名称或 id 之前包含了 dispatch、name、publish、volume 和 restart 选项:
docker run -d --name container-name -p localhost:80:80 -v $HOME/myContainer/configDir:/myImage/configDir --restart=always image-name
在哪里:
--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
如需更多信息,请查看官方Docker run reference。
我有同样的问题。我运行了我的 Docker 映像,它创建了一个具有特定 CONTAINER_ID 的容器。我想使用同一个容器:
首先运行你的 Docker 镜像:
docker run -it -p 8888:8888 -p 6006:6006 -v ~/:/host waleedka/modern-deep-learning
然后列出你制作的所有容器:
sudo docker ps -a
并选择您要使用的容器(我的是 167ddd6d7f15):
sudo docker start -ai 167ddd6d7f15
这是在 Docker 中运行 webdev 服务的示例。图片的名称是 morrisjobke/webdav。您可以从 Docker Hub 中提取它。
运行这些映像后,您可以在 http://localhost:8888/webdav
访问 WebDAV 实例。在内部,文件夹 /var/webdav
用作 WebDAV 根。
您可以通过以下方式运行此容器:
$ docker run -d -e USERNAME=test -e PASSWORD=test -p 8888:80 morrisjobke/webdav
由于您已从 Dockerfile 创建了映像,因此该映像当前未处于活动状态。为了工作,您需要在容器内运行此映像。
$ docker images
命令描述本地存储库中当前可用的图像数量。和
docker ps -a
显示当前可用的容器数量,即活动和退出容器的列表。
在容器中运行镜像有两种方式:
$ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
在分离模式下:
-d=false: Detached mode: Run container in the background, print new container id
在交互模式下:
-i :Keep STDIN open even if not attached
这是 Docker 运行命令
$ docker run image_name:tag_name
有关 Docker 运行的更多说明,您可以访问 Docker run reference。
是了解 Docker 的最佳材料。
要查看 Docker 主机上所有镜像的列表,请运行:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
apache_snapshot latest 13037686eac3 22 seconds ago 249MB
ubuntu latest 00fd29ccc6f1 3 weeks ago 111MB
现在您可以在交互模式下将 Docker 映像作为容器运行:
$ docker run -it apache_snapshot /bin/bash
或者,如果您在本地没有任何图像,请在 Docker Hub 中搜索要下载的图像:
$ 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]
使用 docker pull 命令从存储库中拉取 Docker 映像:
$ docker pull ubuntu
将 Docker 映像作为容器运行:
$ docker run -it ubuntu /bin/bash
$ 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*
对于那些也有同样问题但遇到类似错误的人
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"
我添加了一个对我有用的入口点:
docker run -it --entrypoint /bin/sh
用于没有 Bash 的图像。
示例(来自批准的示例):
run -it --entrypoint /bin/sh ubuntu:12.04
参考:https://gist.github.com/mitchwongho/11266726
docker ps -a
中的“NAME”下打印的人性化名称在这里没有用吗?docker ps
列出容器,而不是图像。如果要从容器创建映像,则必须docker commit
。您可以在提交中使用 NAME(例如docker commit _NAME_ _imagename_
)