热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DockerfileCMD指令将在运行后立即退出容器

如何解决《DockerfileCMD指令将在运行后立即退出容器》经验,为你挑选了3个好方法。

我想在容器启动时设置一些配置,为此我使用的是shell脚本.但是我的容器会在脚本结束后立即退出,我尝试使用-d标志/分离模式,但它永远不会以分离模式运行.

下面是我的Dockerfile

FROM ubuntu:14.04

ADD shell.sh /usr/local/bin/shell.sh

RUN chmod 777 /usr/local/bin/shell.sh

CMD /usr/local/bin/shell.sh

下面是我的shell脚本

#!/bin/bash
echo Hello-docker

    没有任何标志运行

    docker run hello-docker
    

    这将在我的控制台上打印"Hello-docker"并退出

    使用-itd标志运行

    docker run -itd hello-docker
    

    并且在我的控制台输出下面,这次也将很快退出. :( 在此输入图像描述

    我看到的差异在COMMAND部分,当我运行其他图像命令部分将显示"/ bin/bash"并将继续处于分离模式.

    当我在带有shell脚本的容器中运行我的图像时,COMMAND部分将显示"/ bin/sh -c/usr/loca"和Exit.

    我想运行容器直到我不能手动停止它.

编辑:

在Dockerfile中添加ENTRYPOINT指令后,这将不会执行我的shell脚本:(

FROM ubuntu:14.04

ADD shell.sh /usr/local/bin/shell.sh

RUN chmod 777 /usr/local/bin/shell.sh

CMD /usr/local/bin/shell.sh

ENTRYPOINT /bin/bash

根据这里的 docker文档

使用备用参数运行容器时将覆盖CMD,因此如果我使用如下所示的某些参数运行docker image,则不会执行CMD指令.:(

sudo docker run -it --entrypoint=/bin/bash 

NZD.. 19

只要CMDDockerfile中有一个docker 容器就会运行.

在您的情况下,您CMD包含一个包含单个回声的shell脚本.因此容器将在完成回声后退出.

您可以覆盖CMD,例如:

sudo docker run -it --entrypoint=/bin/bash 

这将在容器中启动交互式shell,而不是执行您的CMD.退出该shell后,您的容器将立即退出.

如果您希望容器保持活动状态,则必须确保您的容器CMD继续运行.例如,通过将该行添加while true; do sleep 1; done到shell.sh文件中,您的容器将打印您的hello消息,然后在您停止它之前不再执行任何操作(在另一个终端中使用docker stop).

您可以使用运行容器中的shell打开docker exec -it bash.如果然后执行命令ps ax,它将显示您的shell.sh仍在容器内运行.



1> NZD..:

只要CMDDockerfile中有一个docker 容器就会运行.

在您的情况下,您CMD包含一个包含单个回声的shell脚本.因此容器将在完成回声后退出.

您可以覆盖CMD,例如:

sudo docker run -it --entrypoint=/bin/bash 

这将在容器中启动交互式shell,而不是执行您的CMD.退出该shell后,您的容器将立即退出.

如果您希望容器保持活动状态,则必须确保您的容器CMD继续运行.例如,通过将该行添加while true; do sleep 1; done到shell.sh文件中,您的容器将打印您的hello消息,然后在您停止它之前不再执行任何操作(在另一个终端中使用docker stop).

您可以使用运行容器中的shell打开docker exec -it bash.如果然后执行命令ps ax,它将显示您的shell.sh仍在容器内运行.



2> Anand Suthar..:

最后通过一些实验,我得到了最好的结果如下

我的Dockerfile没有任何问题,因为它是正确的.

FROM ubuntu:14.04

ADD shell.sh /usr/local/bin/shell.sh

RUN chmod 777 /usr/local/bin/shell.sh

CMD /usr/local/bin/shell.sh

我得到的预期结果是,我只需在我的shell脚本文件中添加一个命令(/ bin/bash),如下所示,并且一切都以我最好的方式工作.

#!/bin/bash

echo “Hello-docker” > /usr/hello.txt

/bin/bash



3> user2915097..:

您也可以修改您的第一个Dockerfile,替换

CMD /usr/local/bin/shell.sh

通过

CMD /usr/local/bin/shell.sh ; sleep infinity

这样,您的脚本不会终止,并且您的容器仍在运行.


你也可以在你的CMD中做一些事情,比如`bash -C'/ path/to/start.sh';'bash'这样,当你的脚本完成时,你有一个shell,请参见http://www.markbetz.净/ 2014/03/17 /泊坞窗 - 运行启动的脚本,然后退出到一个壳/
推荐阅读
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • systemd-nspawn可以创建最轻量级的容器(ns的意思就是namespace),本文的实验平台是Ubuntu16.04,x86_64机器。本文的目的是:在Ubuntu中用syst ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 使用C++编写程序实现增加或删除桌面的右键列表项
    本文介绍了使用C++编写程序实现增加或删除桌面的右键列表项的方法。首先通过操作注册表来实现增加或删除右键列表项的目的,然后使用管理注册表的函数来编写程序。文章详细介绍了使用的五种函数:RegCreateKey、RegSetValueEx、RegOpenKeyEx、RegDeleteKey和RegCloseKey,并给出了增加一项的函数写法。通过本文的方法,可以方便地自定义桌面的右键列表项。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • 本文介绍了在Docker容器技术中限制容器对CPU的使用的方法,包括使用-c参数设置容器的内存限额,以及通过设置工作线程数量来充分利用CPU资源。同时,还介绍了容器权重分配的情况,以及如何通过top命令查看容器在CPU资源紧张情况下的使用情况。 ... [详细]
  • 本文介绍了Shell中for命令的基本格式和用法,通过提供一个值列表来迭代执行一系列命令。同时还介绍了如何读取列表中的值,并给出了for命令与其他命令的结合使用示例。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
  • 本文探讨了容器技术在安全方面面临的挑战,并提出了相应的解决方案。多租户保护、用户访问控制、中毒的镜像、验证和加密、容器守护以及容器监控都是容器技术中需要关注的安全问题。通过在虚拟机中运行容器、限制特权升级、使用受信任的镜像库、进行验证和加密、限制容器守护进程的访问以及监控容器栈,可以提高容器技术的安全性。未来,随着容器技术的发展,还需解决诸如硬件支持、软件定义基础设施集成等挑战。 ... [详细]
  • 1.脚本功能1)自动替换jar包中的配置文件。2)自动备份老版本的Jar包3)自动判断是初次启动还是更新服务2.脚本准备进入ho ... [详细]
  • 随着我司的应用都开始容器化,相应的ETL流程也需要迁移到容器中。常规的SQL和shell脚本迁移之后执行基本没有问题,主要的问题在于数据接入使用kettle的场景下,kettle启 ... [详细]
author-avatar
会满足cy
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有