Tag: shell

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

我想在我的容器启动时设置一些configuration,因为我使用的是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 和下面我的控制台输出,这一次也将很快退出。 🙁 我看到的区别是在命令部分,当我运行其他图像命令部分将显示“/ bin / bash”,并将继续在分离模式。 而当我运行我的图像在shell脚本容器与命令部分将显示“/ bin / sh -c / usr / loca”,并退出。 我想运行容器,直到我没有手动停止它。 编辑: 在Dockerfile中添加ENTRYPOINT指令后,这将不会执行我的shell脚本:( FROM ubuntu:14.04 ADD shell.sh /usr/local/bin/shell.sh RUN chmod 777 /usr/local/bin/shell.sh […]

使用shell脚本在Docker容器内运行脚本

我是新来的Docker技术,我正在尝试创build一个shell脚本来设置一个docker容器,我的脚本文件看起来像下面 #!bin/bash docker run -t -i -p 5902:5902 –name "mycontainer" –privileged myImage:new /bin/bash 运行这个脚本文件将在一个新调用的bash中运行容器。 现在我需要运行一个脚本文件(test.sh),它已经在上面给出的shell脚本的容器里了(例如:cd /path/to/test.sh && ./test.sh)请问怎么做随意问,如果情况不明确。

如何在每个“exec”命令中执行Docker镜像的入口点?

在试图用DockerspectestingDockerfiles之后,我终于遇到了一个我无法正确解决的问题 。 我想,问题在于Docker本身。 如果我理解它的过程, 一个入口点只在运行时执行 ,但是如果容器保持启动状态,我启动一个“exec”命令,它不会被重新调用。 我认为这是想要的行为。 但是,如果入口点是所有命令之前的“gosu”脚本,这是一个问题… 例 “myImage”有这个入口点:gosu gosu 1000:1000 "$@" 如果我启动: docker run -it myImage id -u 输出是“1000”。 如果我启动一个容器: docker run -it myImage bash 在这个容器中, id -u输出“1000”。 但是如果我在这个容器中启动一个新的命令,它会启动一个新的shell,并且不会执行入口点,所以:docker docker exec CONTAINER_ID id -u 输出“0”,因为新的shell以“root”身份启动。 有没有一种方法来执行每个入口点? 或者重新使用shell打开? 或者更好的方法来做到这一点? 或者,也许我什么都不懂? ;) 谢谢 ! 编辑 在阅读了这里提出的解决scheme之后,我明白问题不在于Docker的工作方式,而在于Serverspec如何工作。 我的目标是直接testing一个命令作为docker docker run参数,但是Serverspec使用docker exec启动一个容器和testing命令。 所以,最好的解决办法是find如何获得由Serverspec执行的docker run的标准输出。 但是,在我个人的使用情况下,最好的解决办法可能是不使用Gosu,但 – 用户标志:)

简单的脚本需要删除超过4周的所有docker图像

我知道以前也有类似的问题,但我找不到任何我需要的东西。 我也在Docker社区论坛上提出过问题,但没有人能提供帮助。 我无法访问新的docker image prune命令,因为我无法从当前版本1.11.2升级到最新的1.13版本,但是我需要一个可以在cron下运行的简单脚本来删除所有映像悬挂与否,超过1个月大。 我不需要担心容器,因为这是来自只存储图像的回购。 如果docker图像报告“4周”为“1个月”,这将是简单的,我可以使用类似的东西 docker images | grep " [months]* " 并输出到docker rmi命令。 然而,由于它似乎是在“星期”到11个星期内报告,而且一旦形象是3个月或更长时间,只有“月”,我不能这样做。 docker images | grep " [months|weeks]* ago" | awk '{print $3,$4,$5}' 会给我这个输出:: 6828f152f9cc 2 weeks 52a7412befd3 2 weeks 04c2b29e5e08 2 weeks cdfb37d22663 2 weeks ca38a8cabb2b 3 weeks 8b043f2395ba 3 weeks 2aa8b20380a0 3 weeks 1ac7dcf35935 9 weeks f80873c4845b 9 […]

如何通过docker run将parameter passing给Shell脚本

我是docker世界的新手。 我必须调用一个shell脚本,通过docker容器接受命令行参数。 例如:我的shell脚本如下所示: #!bin/bash echo $1 Dockerfile看起来像这样: FROM ubuntu:14.04 COPY ./file.sh / CMD /bin/bash file.sh 我不知道如何在运行容器时传递参数

如何更改Docker ENV var?

在构buildDockerfile ,我经常允许在构build期间configuration参数,以便configuration容易构build的稍微不同的容器。 为了达到这个目的,我使用ENVvariables的默认值和用户可定义的ARG 。 示例Dockerfile快速testing: FROM busybox ARG FLAGS ENV FLAGS ${FLAGS:-} RUN echo "${FLAGS}" 这可以这样使用: docker build –build-arg FLAGS="foo –remove-me" -t <imagename>:<tag> . 现在我发现自己处于这种情况,我希望从允许运行的命令(由于一年多以来没有修复的错误)中主动删除特定的标志(在上面的示例中为–remove-me )。 虽然我知道如何去除其他情况下的国旗: LC_ALL=C sed -e 's/ –remove-me//' 我面临的问题是,我不知道如何pipe道和删除国旗。 我知道我可以在使用RUN这样做,但是我必须重复使用每个RUN语句的sed用法,因此不能使其重复。 编辑:在阅读关于这个AskUbuntu的答案的 shellvariablesreplace之后,我试了一下: ENV FLAGS ${FLAGS//–fully-static/} 但是,我遇到了以下错误: Missing ':' in substitution: "${FLAGS:-}" | "${FLAGS//–fully-static/}" 首先我发现Docker只支持有限的bash variablesreplace方法 。 最后,我可以在Docker GitHub Repo中findshell_parser.go文件,清楚地知道:必须在那里,在第一步中主动杀死这条path。

为什么在dockerfile运行指令的/ bin / bash -c“…”部分中,echo $ VARIABLE,在docker build上返回空?

题 : 观察— echo home和— env之间的输出(见下面), $GOPATH被明确定义为$HOME 。 另外, echo $HOME的输出在— start和— echo home之间是可见的。 但是,在— env和— echo gopath之间echo $GOPATH的输出是空的。 为什么? 细节 : Dockerfile RUN指令有问题 RUN /bin/bash -c "echo '——————————————– start' ;\ echo $HOME ;\ echo '——————————————– echo home' ;\ source $HOME/.gvm/scripts/gvm ;\ gvm use go1.5.1 ;\ env ;\ echo '——————————————– env ' ;\ echo $GOPATH […]

在dockerfile中插入条件运行语句

我正在尝试编写一个docker文件,它将运行一个RUN命令来searchpackage.json文件中的一个单词并对其执行操作: 这是我简单的dockerfile: FROM ubuntu:14.04 COPY package.json package.json RUN if grep -q "grunt" package.json; then echo succeed fi 正如你可以看到我只是想要一个简单的if语句,但它得到这个错误: Step 2 : RUN if grep -q "grunt" package.json; then echo succeed fi —> Running in af460df45239 /bin/sh: 1: Syntax error: end of file unexpected (expecting "fi") INFO[0001] The command [/bin/sh -c if grep -q "grunt" package.json; […]

如何在Docker容器中获取本地主机IP地址?

我正在使用docker并使用脚本运行。 我想在Docker中将主机IP地址configuration成其中的一个。 #!/bin/bash IP=$(echo `ifconfig eth0 2>/dev/null|awk '/inet addr:/ {print $2}'|sed 's/addr://'`) echo Setting xwiki config IP CONFIG=/xwiki/webapps/xwiki/WEB-INF/xwiki.cfg sed -i -e "s/^xwiki.authentication.authhost=localhost*/xwiki.authentication.authhost= $IP/" $CONFIG /xwiki/start_xwiki.sh -f 我用下面的命令运行我的docker。 docker run -t -i $EXPOSE_PORTS $IMAGE "$@"

Docker如何在不调用命令行的情况下运行一个命令?

目前我正在学习Docker,并通过Dockerfile参考 ,特别是RUN指令。 有两种forms的RUN – 在shell中运行命令的shellforms,以及“不调用命令shell”(从注释部分引用)的execforms。 如果我正确理解了文档,我的问题是 – 如果Docker在没有shell的情况下运行一个命令,又该如何运行? 请注意, Can命令的答案可以在没有shell的情况下执行? 实际上并没有回答这个问题。