Tag: bash

为什么在使用rm从容器中删除文件后虚拟大小仍然相同?

我想了解更多关于Docker的信息。 我是如此初学者,与这个和Linux非常新。 我的英文不完美,所以我复制了terminal输出。 我有一个516MB的虚拟大小的图像。 我在容器中启动了bash,并使用wget将一些26MB的数据下载到这个容器中。 下载后,我用提交从容器的变化创build一个图像。 之后,虚拟大小是542.5MB。 那是对的。 提交后,我又开始了bash,并删除了这个文件。 当我提交更改的图像虚拟大小是542.8MB。 这个大小并没有减less,反而增加了。 你能告诉我原因吗? 本地图片: [fedora_user@fedora-vm ~]$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE tester/mytestfedora latest c0ca83567bdd 4 seconds ago 516 MB fedora latest 834629358fe2 3 months ago 241.3 MB 使用最小的和下载文件: [fedora_user@fedora-vm ~]$ docker run -i -t tester/mytestfedora /bin/bash bash-4.3# su dockeres [dockeres@05ef6e284e32 /]$ cd […]

如何把docker工人变成jq?

我试图从dockerpipe理JSON日志到jq 。 它工作正常,如果我使用: docker logs container_id 2>&1 | jq '.' 但是,如果我试图拖尾,它会卡住(不显示任何内容)。 docker logs -f container_id 2>&1 | jq '.' 拖尾本身确实有效: docker logs -f container_id 2>&1 我在这里错过了什么?

化解叉子炸弹:杀死叉子过程

我想使用docker在shell中执行用户提供的(可能不安全的)代码。 每次运行都应该受到时间的限制,比如10秒。 所以在10秒之后,我想停止命令以及由它制造的所有分支。 我已经使用ulimit -u 30设置了最大进程数的限制,现在forkbomb并没有对系统造成任何损害。 我用id = 1000的用户运行docker,container里的用户id = 3000,所以启动这个命令的用户没有被fork炸弹拦截。 现在我想处理超时。 不幸的是, timeout 10s docker run -u 3000 … forkbomb不起作用。 我所要做的是杀死用户拥有的所有进程id = 3000,但这些进程无限分叉,我担心killall -KILL -u 3000不会总是工作。 killall不是primefaces的,是吗? 所以,我正在寻找一种方法来杀死一些特定用户拥有的所有进程,即使进程fork。 我发现了一个有以下代码的博客文章 : cd /proc; for p in [0-9]*; do read CMDLINE < $p/cmdline; if [[ $CMDLINE == "processWithBombName" ]]; then kill -s SIGSTOP $p; fi; done […]

发送SIGTERM到所有进程

我有一个bash脚本调用run.sh启动多个进程 #!/bin/bash proc1 & proc2 & proc3 & final # this runs until sigterm 当我执行run.sh并发送一个SIGTERM到run.sh,我不认为SIGTERM被发送到final ,我不认为它被发送到proc1 , proc2和proc3 。 请注意,在这个用例中,这是一个运行run.sh的docker容器,运行run.sh docker stop是我试图发送SIGTERM的方式。 bash脚本最简单的方法是将sigterm发送到所有启动的进程? 我能想到的唯一方法是用&开始final ,然后在run.sh做一个while循环? 编辑 – 我试过了,但似乎并没有工作:在run.sh #!/bin/bash _term() { echo "Caught SIGTERM signal!" } trap _term SIGTERM echo "hi" sleep 100000 & wait $! 在运行docker站时,我从来没有看到Caught SIGTERM signal!

docker日志和缓冲输出

我想连续打印没有换行符(等待行为)的点。 这个bash单行内容在我的机器上工作正常: $ while true; do sleep 1; printf '.'; done …….^C 但是,当我在Docker容器中运行它时,并且当我尝试使用docker日志读取其输出时,将不输出任何输出: $ docker run -d –name test_logs ubuntu:14.04 bash -c "while true; do sleep 1; printf '.'; done" 60627015ed0a0d331a26e0c48ccad31c641f2142da55d24e10f7ad5737211a18 $ docker logs test_logs $ docker logs -f test_logs ^C 我可以通过在进程1(bash命令)上使用strace来确认bash循环在容器中执行: $ docker exec -t test bash -c 'apt-get install -y strace; strace -p1 […]

Docker和php-cli

我已经安装了PHP 7 (php-fpm和php-cli),并且我的应用程序对于新的PHP工作正常,但是testing( phpunit )不会因为某些扩展未更新。 所以我想使用/创build一个docker容器与PHP 5.6 ,将取代我的系统(主机)的PHP CLI 。 例如,如果我从Dockerfile构build名为php56容器,如下所示: FROM ubuntu:15.10 RUN apt-get -y update && apt-get install -y php5-cli ENTRYPOINT ["php"] 并运行: sudo docker run -it php56 -v 我从Docker容器获取版本信息,所以docker的php-cli 5.6正在工作。 所以我不想把docker run命令 /usr/bin/php 让主机使用docker容器中的php-cli 。 (然后php -v会给我PHP 5.6信息不PHP 7.0版本信息) 这不是最好的例子,但我希望你们能明白我想要做什么。 如果不能这样解决,请推荐我其他解决scheme。

在Docker中运行时,优雅地停止Solr

我正在docker容器中运行一个solr 我的dockerENTRYPOINT是$SOLR_HOME/bin/solr start ${options} 目前,当我运行docker stop <container Id>它杀死进程,但solr停止不正确 为了正确地停止Solr,我们需要运行: $SOLR_HOME/bin/solr stop 当docker stop <container Id>执行时,如何configurationdocker来调用solr stop命令?

不能从Docker容器中退出

我有一个容器,我运行 docker run -it –rm –name <container_name> <image>:<tag> 通常情况下,我可以通过exit命令进入集装箱docker。 现在,我有一个DockerFile,它以运行一个简单的bash脚本的入口点结束: #!/usr/bin/env bash # Add new user groupadd -r $GROUP –gid $GROUPID useradd -r $USER –uid $USERID –gid $GROUPID # Launch application with new user su – -c "python <path_to_script>/myscript.py" $USER 现在,一旦我的脚本结束,我期望从容器中退出,但入口点bash脚本中的所有内容都会一次又一次地运行(比如10次)。 为什么我的容器有这种行为?

ECS Docker Container获取运行cron的envvariables

我正在通过AWS ECS运行Docker容器,并试图使用由ecs-agent设置的环境variables。 特别我抓住了 $AWS_CONTAINER_CREDENTIALS_RELATIVE_URI 我作为根login到容器,当我检查env上面存在。 但是,当我使用sudo检查env时,环境variables不存在。 我正在运行一个使用这个variables的python脚本,当我以root身份运行这个脚本时,脚本能够find这个环境variables并且成功执行。 不过,我需要使用cron运行这个脚本。 到目前为止,我还没有能够让cron运行和访问根环境variables。 任何想法,将不胜感激。

无法closures高负载的docker的MySQL

我有一个脚本,每3次推出一个docker,直到有20个docker。 之后,当一个完成后,另一个docker将启动。 在docker中,我启动了一个bash脚本,它将启动apache2,mysql和一个节点脚本。 一段时间后,节点脚本结束,泊坞窗closures。 但有时(完全随机),docker将永远挂在那里,而不是closures。 我甚至无法用docker stop或者docker kill来closures主机。 如果我尝试重新启动主机,主机不会完全closures。 我检查了docker的数据和docker工人几乎只有0%的CPU使用率。 试图在bash脚本中手动closures每个进程,我看到它是不会closures的mysql。 我尝试sudo服务MySQL停止和sudo mysqladminclosures,但都失败。 做一个docker顶端,我可以看到剩下的唯一的过程是当前的mysql 如果这可以帮助,我启动docker与此命令docker运行–rm test01 / bin / bash /home/gps/entry_point.sh 5811fafb27517f523d1b96e5 http://10.1.5.41:8889主 我的主人和docker工人都是debian jessie,而且大部分时间都能正常工作。 我不知道这是否与问题有关,但是当我在主人身上做了一个dmesg的时候,我有很多的消息: [ 4197.073458] docker0: port 7(veth27ee643) entered disabled state [ 4197.764473] aufs au_opts_verify:1570:dockerd[533]: dirperm1 breaks the protection by the permission bits on the lower branch [ 4197.809072] aufs au_opts_verify:1570:dockerd[533]: dirperm1 […]