【问题标题】:Run a Docker image as a container将 Docker 映像作为容器运行
【发布时间】:2013-09-01 02:30:17
【问题描述】:

dockerfile 构建 Docker 映像后,我看到映像已成功构建,但我该怎么办?我不应该能够将它作为容器运行吗?

【问题讨论】:

    标签: docker docker-image


    【解决方案1】:

    具体的运行方式取决于你是否给图像一个标签/名称。

    $ 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 ps -a中的'NAME'下打印的人性化名称在这里没有用吗?
    • docker ps 列出容器,而不是图像。如果你想从容器创建镜像,你必须docker commit。您可以在提交中使用 NAME(例如 docker commit _NAME_ _imagename_
    • @Andy 为什么我们最后使用 /bin/bash ?我也是新人
    • @RaheelKhan 因为你的 docker 镜像需要运行一些东西。您可以将其替换为已安装的程序。 /bin/bash 只是一个已经安装的方便的 shell。
    • 如果需要添加环境变量可以执行 docker run -i -t -e ROOT_PASSWORD=root ubuntu:12.04
    【解决方案2】:

    执行以下步骤:

    1. $ docker images

      您将获得带有指定标签的所有本地 Docker 映像的列表。

    2. $ docker run image_name:tag_name

      如果您没有指定tag_name,它将自动运行带有“最新”标签的图像。

      除了image_name,您还可以指定图像 ID(无 tag_name)。

    【讨论】:

    • 我是 docker 新手,对我有帮助,谢谢。此外,我们可以检查运行图像的状态 sudo docker ps -a
    【解决方案3】:
    • 列出 Docker 镜像

      $ docker images
      
    • 如果您的应用程序想在端口 80 上运行,并且您可以公开不同的端口以在本地绑定,例如 8080:

      $ docker run -d --restart=always -p 8080:80 image_name:version
      

    【讨论】:

    • 这个--restart=always 选项应该始终作为一个规则使用。
    【解决方案4】:

    您可以使用以下方式查看可用图像:

    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_iddocker rm container_id 阻止它。

    您还可以使用-rm 参数运行您的容器,因此如果您停止容器,它将自动被删除。

    【讨论】:

    • --rm(注意:2 破折号不是单一的)选项是黄金!!!,我的系统到处都是停止(死)的容器。
    【解决方案5】:

    使用以下命令获取您要运行的图像的名称或 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

    【讨论】:

      【解决方案6】:

      我遇到了同样的问题。我运行了我的 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
      

      【讨论】:

        【解决方案7】:

        这是一个在 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
        

        【讨论】:

        • 重新“运行webdev服务”:你的意思是“运行WebDAV服务”吗?还是“运行网络开发服务”
        【解决方案8】:

        由于您已从 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 的最佳材料。

        【讨论】:

          【解决方案9】:

          要查看 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
          

          【讨论】:

            【解决方案10】:
            $ 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*
            

            【讨论】:

            • 解释一下。
            【解决方案11】:

            对于那些也有同样问题,但遇到类似错误的人

            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

            【讨论】:

              猜你喜欢
              • 2018-07-06
              • 1970-01-01
              • 2017-12-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-09-04
              • 2016-02-12
              相关资源
              最近更新 更多