Tag: bash

在bash中从“docker stop”捕获信号

我有一个docker容器中的入口点脚本,如下所示: #!/bin/bash echo starting up function shut_down() { echo shutting down pid=$(ps -e | grep myapp | awk '{print $1}') kill -SIGTERM $pid exit } trap "shut_down" SIGKILL SIGTERM SIGHUP SIGINT EXIT /opt/myapp 我无法弄清楚如何通过在容器上运行docker stop来发送信号。 当以交互方式运行时, ctrl+c将按预期触发,但是docker stop命令仅等待10秒超时,并且不用进入shut_downfunction就退出 如何捕获在bash中的docker stop发出的信号做一些清理?

如何在Dockerfile中运行bash函数

我在nvm定义了一个bash函数/root/.profile 。 当我在RUN步骤中调用它时, docker build没能find那个函数。 RUN apt-get install -y curl build-essential libssl-dev && \ curl https://raw.githubusercontent.com/creationix/nvm/v0.16.1/install.sh | sh RUN nvm install 0.12 && \ nvm alias default 0.12 && \ nvm use 0.12 错误是 Step 5 : RUN nvm install 0.12 —> Running in b639c2bf60c0 /bin/sh: nvm: command not found 我设法通过用bash -ic包装它来调用nvm ,这会加载/root/.profile 。 RUN […]

如何在每个“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,但 – 用户标志:)

docker-machine中的Eval:terminal vs shell脚本

我正在尝试运行一个简单的shell脚本来自动更改docker-machine环境。 问题是这样的,当我在Macterminal中直接运行以下命令时,输出如下内容: eval $(docker-machine env default) docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS default * digitalocean Running tcp://***.**.***.***:**** v1.12.0 所以基本上你会期望,但是当我运行下面的.sh脚本: #!/usr/bin/env bash eval $(docker-machine env default) 输出是: ./run.sh docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS default digitalocean Running tcp://***.**.***.***:**** v1.12.0 所以基本上,它不是设置为主动,我无法访问它。 有没有人遇到过这个问题,知道如何解决它? 看起来对我来说真的很奇怪,几乎所有的东西都在运行,而且自动化了。 干杯,亚伦

Kubernetes – kubectl exec bash – 会话下拉和线宽

我有k8s集群与3个奴才,主人和haproxy在前面。 当我使用 kubectl exec -p $POD -i -t — bash -il 为了访问pod中的bash(在这种情况下,它是一个单独的容器),我进入后,像5分钟后,我终于从terminal退出。 如果我重新进入容器,我可以看到我的旧bash进程正在运行,并为我的新连接启动了一个新的进程。 有没有办法来防止这种情况发生? 当我使用docker执行它工作正常,不会掉我,所以我想这是从kubernetes。 作为一个额外的问题 – 有没有办法增加每行使用kubectl exec时的字符? 我得到不同于docker exec的截断输出。 提前致谢!

冒号在docker入口点bash脚本行开头

我正在通过一个入口点脚本查看一个docker镜像 ,他们有以下几行(53-54) : ${POSTGRES_USER:=postgres} : ${POSTGRES_DB:=$POSTGRES_USER} 我看到了这个线程:(冒号)GNU Bash内build的目的是什么? 并能够弄清楚:意思是真实的,并且:=被用来分配默认值,但是它并没有真正触及到什么:在行的开头,至less对于这个特定的情况。

停止并删除docker集装箱,如果它的运行

我正在寻求实际上停止和删除docker集装箱,如果它正在运行。 这是一个构build脚本。 以下面的例子。 我将如何停止并删除docker容器“rabbitmq”,如在bash脚本的NAMES列中所看到的。 docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9909a5e2856f rabbitmq-image "/docker-entrypoint.s" 11 minutes ago Up 11 minutes 0.0.0.0:5672->5672/tcp, rabbitmq 8990dd1fe503 redis-image "/entrypoint.sh redis" 6 weeks ago Up 4 days 0.0.0.0:32770->6379/tcp redis etc 下面的命令将删除容器,并做我即将做的事情 docker stop rabbitmq && docker rm -f rabbitmq 然而,它把它整理成一个我想知道的脚本,我想它会看起来像这样。 #!/bin/bash if [ /*docker ps check some […]

docker exec在cron中不起作用

我有一个非常简单的命令,它可以独立的作为一个命令或者bash脚本运行,但是当我把它放在crontab中的时候不行 40 05 * * * bash /root/scripts/direct.sh >> /root/cron.log 有以下线路 PATH=$PATH:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin SHELL=/bin/sh PATH=/bin:/sbin:/usr/bin:/usr/sbin:/root/ # Mongo Backup docker exec -it mongodb mongodump -d meteor -o /dump/ 我试图改变脚本的URL到/usr/bin/scirpts/没有运气 我甚至试图直接在cron中运行脚本 26 08 * * * docker exec -it mongodb mongodump -d meteor -o /dump/ >> /root/cron.log 没有运气,任何帮助表示赞赏。 编辑 我在/root/cron.log文件中也看不到任何错误

如何从容器中运行的脚本访问docker容器的元数据?

我想了解是否有可能使用bash脚本读取容器的元数据(特别是标签)属性。 例如,如果有像这样的Dockerfile: FROM busybox LABEL abc = abc_value1 而且,如果我基于上面的文件构build并运行图像,如下所示: docker build . -t image1 docker run -ti image1 /bin/bash 有什么办法可以访问bash shell里的“abc”标签的值吗? 如果是这样,怎么样?

如何在docker中运行mongod后运行mongorestore

我试图设置一个与docker的mongodb服务器,让它从网上下载一个转储,并填充该信息。 我的问题是,我可以让它运行并填充数据库,但完成后,它只是closures。 这就是我解决我的问题的方法: sudo -u mongodb /usr/bin/mongod –config $conf $args & mongorestore dump 这里的问题是,如果mongod没有运行,我不能运行mongorestore ,但是如果我用mongod &启动mongod,那么在mongorestore运行完成后容器将closures。 在我的Dockerfile中 ,我通过执行CMD ["/etc/mongod/mongostart.sh"]运行这些命令。