【问题标题】:Docker Loaded by run command but can't access consoleDocker 通过运行命令加载但无法访问控制台
【发布时间】:2018-12-02 11:49:43
【问题描述】:

我构建了一个Dockerfile,其中构建命令成功

sudo docker build --network=host -t nid-robotic-server .

但是当我尝试运行文件时

docker run -it nid-robotic-server

它突然退出。

rafa@ace:/home/automation$ docker run -it robotic-server
8:C 02 Dec 2018 11:39:05.871 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
8:C 02 Dec 2018 11:39:05.871 # Redis version=5.0.2, bits=64, commit=00000000, modified=0, pid=8, just started
8:C 02 Dec 2018 11:39:05.871 # Configuration loaded
rafa@ace:/home/automation$

谁能帮我解决这个问题?这将是一个很大的帮助。

【问题讨论】:

  • 您希望容器在启动时执行什么操作?我认为您使用 ENTRYPOINT 指令错误。 Read here。指定两个不同的ENTRYPOINT 指令是没有意义的
  • 您的第二个 ENTRYPOINT 正在运行(请参阅@gasc 关于有两个的评论),但它作为守护进程(后台)运行,因此 Docker 认为它已退出并停止容器。删除ENTRYPOINT redis-server --daemonize yes 的守护进程部分,看看它是否保持运行。

标签: docker docker-compose docker-swarm docker-machine


【解决方案1】:
docker run -it --entrypoint="/bin/sh" nid-robotic-server

docker run -it --entrypoint="/bin/bash" nid-robotic-server

应该适合你。

这取决于您如何在 dockerfile 中配置 ENTRYPOINTCMD。如果您将 shell 以外的其他内容定义为入口点,您将无法“简单地”以交互方式运行您的容器,您需要先使用 --entrypoint 覆盖入口点。

如果您打算将映像作为 dameon 运行,则为入口点设置除 shell 之外的其他内容是完全可以的,甚至是很好的做法(这是 docker 的常见情况)。

请参阅https://docs.docker.com/engine/reference/builder/#entrypoint 了解更多信息。

【讨论】:

    【解决方案2】:

    当 docker 运行时,您没有任何要执行的任务。您以错误的方式使用入口点。 --daemonized 之类的任务将在后台运行。 检查你的 Dockerfile,docker 启动时不会执行任何任务。

    至少在您的 dockerfile 末尾添加此部分:

    CMD ["/bin/sh"]
    

    然后通过运行此命令,您将被放入 docker 的sh shell。

    docker run -it --entrypoint="/bin/sh" nid-robotic-server
    

    【讨论】:

    • 感谢您的回答。它帮助了我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 2013-08-01
    • 2021-07-06
    • 1970-01-01
    相关资源
    最近更新 更多