docker - Docker容器未启动,显示为 'Exited n seconds ago'

标签 docker

我试图了解docker在启动/进入容器时的工作方式。我对此很陌生,所以请多多包涵。我尝试在SO中找到我需要的答案,但到目前为止还没有找到。

我正在尝试实现3个基本目标:

  • 启动容器
  • 确保所有端口都映射到我的容器(即,我可以从容器外部看到容器的apache)
  • SSH或将控制台放入我的容器

  • 这是我用来启动容器的内容:
    caldav@caldav:~/docker/caldav-server$ sudo docker run -it -d -P  caldav-server service apache2 start
    

    48fbea1865e302768a863767bf01b08f35f0221a4b29e5f2208d57e54660ef42

    但是当我运行ps时,我将其视为“n秒钟前退出”:
    CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS                     PORTS               NAMES
    48fbea1865e3        caldav-server       "service apache2 sta   2 seconds ago       Exited (0) 1 seconds ago 
    

    这到底是什么意思?显然,当我转到http://[IP_ADDRESS]时,我看不到它正在运行

    更新:好的,当我删除apache start命令时,它似乎仍然存在:
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    20d5daca6237        caldav-server       "/bin/bash"         10 seconds ago      Up 9 seconds                            thirsty_ritchie     
    

    但后来我似乎无法将控制台加入其中。这是我尝试的:
    docker attach 20d5daca6237
    

    很好(可以让我进行bash访问)。但是,当我尝试通过键入退出
    $ exit
    

    然后,它将容器显示为ps中的“已退出”状态。我做错了吗?

    最佳答案

    Docker容器仅在其初始命令运行时运行。在这种情况下,该命令为service apache2 start,此命令将在不超过几秒钟后退出,此时容器也将停止。如果要在容器中运行守护程序,则需要使该守护程序成为主程序并使它在前台运行,或者需要使用带有可处理守护程序的命令的镜像(例如 phusion/baseimage )。

    关于docker - Docker容器未启动,显示为 'Exited n seconds ago',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31413055/

    相关文章:

    docker - Docker Volume-从容器中删除后保留主机文件

    docker - Ubuntu 20.04 软件包缺少 docker 镜像中的所有 mo 文件

    macos - dockerized testcafe 远程浏览器测试

    docker - 如何使用 docker-compose 将已运行的容器链接到我的应用程序

    docker - 如何列出群模式节点?

    docker - 进行更改后,GitLab docker镜像不会从gitlab.rb重新配置某些参数

    python - 将 Oracle Instant 客户端安装到 Python cx_Oracle 的 Docker 容器中

    docker - 如何让 docker 容器进入状态 : dead for debugging?

    mysql - 如何使用 Entity Framework Core 正确运行迁移和播种 docker MySql DB

    git - 将标签作为 Docker 容器内的环境变量进行访问