Tag: bash

将主机path转换为泊坞窗容器内部path

我需要知道至less一个正在运行的docker容器可以访问位于主机上的文件的path。 从主机,我知道主机的文件的path,但不知道在容器中。 对于映射到容器中的每个文件,该解决scheme必须是有效的,并且如果给定的文件没有安装在容器内,则该scheme将失败 例如 : docker工具容器运行选项-v /srv:/etc 在主机上有一个文件/srv/foo 。 从容器内部,这个文件被称为/etc/foo 。 从主机上,我怎么能预测/srv/foo会变成容器内的/etc/foo ? (是的,我真的需要这样做…) 我想出了这个微小的丑陋的脚本,我正在跳跃寻找一个适当的解决scheme。 我已经知道循环吸吮,但我的问题是关于这个想法。 containerid="123abc" hostpath="/srv/foo" dockerpath="" # <– How to set that? # — For all mapped directories (host side) for hostdir in $(docker inspect –format '{{ range .Mounts }}{{ .Source }} {{ end }}' ${containerid}); do # — If hostpath is […]

Docker群连接错误

我正在编写一个bash脚本来自动configuration一个环境,但是在向pipe理器节点添加工作的阶段,会导致一个错误。 #!/bin/bash WORKERSARRAY=(worker1) banner() { figlet SysMonAutogen } create_docker_machine() { docker-machine create \ -d amazonec2 \ –amazonec2-region eu-west-1 \ $1 } create_infrastructure_manager() { echo Generating System Infrastructure… echo creating manager node… create_docker_machine manager echo created manager node… } create_infrastructure_worker() { for i in "${WORKERSARRAY[@]}" do echo creating $i node… create_docker_machine $i echo created $i node… […]

在高山docker图像中使用SUID

我正在尝试在Alpine Docker镜像中以不同的用户身份运行一些脚本。 以devuserlogin时,我想以root devuser运行setup.sh ,并以appuser devuser运行app.sh 由于我已经读过,你不能在脚本文件上使用SUID,我有几个C程序, setup app和app ,调用脚本。 我可以运行setup作为root但不能运行app作为appuser 。 这是目录的内容。 请注意,应用程序和安装程序在程序上设置了SUID位。 我试图在脚本上设置SUID,但没有奏效。 /opt/app $ ls -l total 24552 -r-sr-xr-x 1 appuser appgroup 10632 Jun 27 12:59 app -r——– 1 appuser appgroup 25101769 Jun 27 12:59 app.jar -r-xr-xr– 1 appuser appgroup 327 Jun 27 12:59 app.sh -r——– 1 appuser appgroup 316 Jun 27 […]

运行`eb local run`作为bash脚本的后台进程失败,出现各种错误(描述)

我试图写一个脚本: 运行docker-compose up -d编排一些服务(数据库等) 运行eb local run来启动Web容器。 将Web容器连接到由docker-compose创build的dockernetworking 我遇到的问题是与eb local run因为它似乎阻止,但不会作为后台进程工作。 以下是我的脚本示例: docker-compose up -d # Run backing services, postgres, redis, amqp, etc. eb local run > ./logs/eb.log 2>&1 & # Run web container with eb # Wait for container to be running spin="-\|/" i=0 until [ "$(docker ps -q –filter expose=8080)" ]; do i=$(( […]

Shell脚本 – “等待”不等待所有进程完成

在shell脚本中,我正在构build一些docker镜像(在后台),一旦完成,我正在运行它们(在后台),然后我必须等待所有这些完成。 代码如下所示: for tag in "${tags[@]}" do docker build -f dockerFilePath -t $tag . & done wait for tag in "${tags[@]}" do docker run $tag arg1 arg2 | tee logoutput & done wait 问题是不是第二个等待部分中的所有docker run命令都能够完成。 docker运行命令需要不同的时间才能完成,其中任何一个都是不完整的(总共4个)。 此外,我读了这个等待只适用于进程调用wait的直接subprocess,在这种情况下,我认为所有的docker build和docker run命令都是脚本进程的直接subprocess。 或者是错误的假设?

增强的docker统计命令与RAM和CPU的总量

我只想分享一个小脚本来增强docker stats命令。 我不确定这种方法的正确性。 我可以假设完整的Docker部署消耗的内存总量是每个容器消耗内存的总和吗? 请分享您的修改或更正。 这个命令logging在这里: https : //docs.docker.com/engine/reference/commandline/stats/ 在运行docker stats时输出如下所示: $ docker stats –all –format "table {{.MemPerc}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.Name}}" MEM % CPU % MEM USAGE / LIMIT NAME 0.50% 1.00% 77.85MiB / 15.57GiB ecstatic_noether 1.50% 3.50% 233.55MiB / 15.57GiB stoic_goodall 0.25% 0.50% 38.92MiB / 15.57GiB drunk_visvesvaraya 我的脚本将在最后添加以下行: 2.25% 5.00% 350.32MiB / 15.57GiB TOTAL docker_stats.sh #!/bin/bash # […]

如何自动完成一个命令别名的多级命令?

假设我有两个bash函数: dock() { sudo docker $@ ;} 和 dock-ip() { sudo docker inspect –format '{{ .NetworkSettings.IPAddress }}' $@ ;} 如何让bash自动完成使用第二个函数 ? 第一个,就像添加: _completion_loader docker; complete -F _docker dock 这不适用于第二个。 Docker的自动完成源代码位于Debian Stretch的/usr/share/bash-completion/completions/docker 。 我有更多的function,如dock-run , dock-exec等,所以我不想为他们每个人写一个自定义完成function。 另外, complete -F _docker_container_inspect dock-ip只能部分工作; 选项卡只列出容器,不完成部分string。 研究: 我如何自动完成嵌套的多级子命令? < – 需要自定义function https://superuser.com/questions/436314/how-can-i-get-bash-to-perform-tab-completion-for-my-aliases < – 自动仅用于top命令

在容器中运行shell脚本

我使用lemonlatte / docker-webvirtmgr作为基础文件,但问题是没有为用户www-dataconfigurationssh密钥,所以我写了下面的shell脚本: #!/bin/sh if [ ! -d "/var/local/webvirtmgr/nginxhome" ]; then mkdir /var/local/webvirtmgr/nginxhome chown -R www-data:www-data /var/local/webvirtmgr/nginxhome usermod -d /var/local/webvirtmgr/nginxhome www-data su – www-data -s /bin/bash -c "ssh-keygen -b 2048 -t rsa -f ~/.ssh/id_rsa -q -N ''" su – www-data -s /bin/bash -c "touch /var/local/webvirtmgr/nginxhome/.ssh/config && echo -e 'StrictHostKeyChecking=no\nUserKnownHostsFile=/dev/null' >> /var/local/webvirtmgr/nginxhome/.ssh/config" su – www-data -s […]

如何使用脚本修改容器中的文件

我想运行一个容器,并修改其中的某些文件。 我正在尝试使用脚本来做到这一点。 如果我使用: docker run -i -t <container> <image> ,它会给我 STDERR: cannot enable tty mode on non tty input 如果我使用: docker run -d <container> <image> bash ,容器不会启动。 有没有办法做到这一点? 谢谢

如何更改产生的孩子bash的bash提示符? 特别是一个docker的shell

我们已经创build了大部分相同的docker快速启动脚本的自定义版本。 我们想要进一步的定制是改变提示,清楚地指出你在dockerconfiguration的shell中: (docker) ~/src/code $ 脚本产生一个像这样的子shell: eval $($DOCKER_MACHINE env $VM –shell=bash) USER_SHELL=$(dscl /Search -read /Users/$USER UserShell | awk '{print $2}' | head -n 1) if [[ $USER_SHELL == *"/bash"* ]] || [[ $USER_SHELL == *"/zsh"* ]] || [[ $USER_SHELL == *"/sh"* ]]; then $USER_SHELL –login else $USER_SHELL fi 我可以很容易地通过export PS1="(docker)$"来更改我的主机提示符,但是难以在产生子shell中进行这样的更改。 我试过$USER_SHELL –login –noprofile -c "export […]