Tag: bash

无法运行脚本添加到现有的docker集装箱

我有一个没有问题的容器。 我添加了一个bash脚本来补充已经在容器中的其他几个脚本。 docker镜像将2个脚本复制到/ usr / local / bin,并且可以使用docker exec -c容器名称存在脚本访问它们。 我将自己的脚本添加到相同的目录,并运行相同的命令时,我得到一个错误,exec不能运行该脚本:没有文件或目录,脚本不位于$ PATH。 我检查path,果然,列出了/ usr / local / bin。 我检查了权限,脚本是755。 然后我用Docker exec -it mycontainer bash打开一个交互式shell,并运行/ usr / local / bin / myscript,它运行没问题。 为什么我不能像其他两个(包含在图像中)那样从容器外运行脚本。 所有这三个function一天几乎没有什么特别的程序,一个列表文件,一个添加文件,一个读取文件。 基地是Ubuntu。 编辑:find我遇到问题的地方。 如果有其他人碰巧犯了同样的错误,提供答案。 编辑2:所以与docker图像来执行一些常见的函数的脚本调用图像不是容器,所以我添加脚本到容器对脚本没有影响,这就是为什么我一直得到没有文件或目录错误。 这个脚本中的代码是: docker run –rm -v "$(pwd)/config":/path/to/file -ti image_name:latest" mynewscript $@ 当然,这是违背形象而不是容器。 一旦我注意到,我试图运行而不是运行它,它运行没有错误,就像这样: docker exec -it container_name mynewscript

语法错误:dockerfile RUN语句中的多行bash命令

我有这个Dockerfile,我回应以下行: echo $"RUN cat file | while read pkg \ do\ sudo apt-get install -qy $pkg \ done" >> Dockerfile 现在,当docker执行这一行时,我得到以下错误: /bin/sh: -c: line 1: syntax error: unexpected end of file The command '/bin/sh -c cat autobuild/buildenv_packages | while read pkg do sudo apt-get install -qy done' returned a non-zero code: 1 我知道有一些小的语法错误,但我无法弄清楚。 请注意, apt-get […]

保存docker状态(例如,编辑postgresql.conf文件)

我已经下载了一个postgresql泊坞窗图像,并在编辑一些configuration文件。 我有的问题是,每当我编辑configuration文件并提交docker图像(保存为一个新的),它永远不会保存任何东西。 该图像仍然是我下载的相同。 我正在使用的图片: https : //hub.docker.com/_/postgres/ 我相信这是最新的docker文件。 https://github.com/docker-library/postgres/blob/a00e979002aaa80840d58a5f8cc541342e06788f/9.6/Dockerfile 这就是我所做的: 1. Run the postgresql docker container 2. Enter the terminal of the container. docker exec -i -t {id of container} /bin/bash 3. Edit some config files. 4. Exit the container. 5. Commit the changes by using docker commit {containerid} {new name} 6. Stop the old […]

kali linux docker镜像构build脚本失败 – 语法错误附近的意外标记`;&'

据官方网站介绍: 官方-卡利Linux的搬运工图像 #!/bin/bash # Install dependencies (debbootstrap) sudo apt-get install debootstrap # Fetch the latest Kali debootstrap script from git curl "http://git.kali.org/gitweb/?p=packages/debootstrap.git;a=blob_plain;f=scripts/kali;hb=HEAD" > kali-debootstrap &&\ sudo debootstrap kali ./kali-root http://http.kali.org/kali ./kali-debootstrap &&\ # Import the Kali image into Docker sudo tar -C kali-root -c . | sudo docker import – kalilinux/kali &&\ sudo rm -rf […]

DockerFile:启动后如何获得bash命令行?

这个问题不重复,因为我想获得一个交互式shell而不用-it标志运行。 我正在向Docker迈出第一步来创build仅用于内部使用的图像。 我从这个envirornment_full.df开始: FROM ubuntu:16.04 ENTRYPOINT ["/bin/bash"] 我然后build立 docker rmi environment:full docker build -t environment:full -f environment.df . 然后运行 docker run environment:full 运行docker images -a我看到我的形象 REPOSITORY TAG IMAGE ID CREATED SIZE environment full aa91bbd39167 4 seconds ago 129 MB 所以我运行它 docker run environment:full 我什么也没看见发生…. $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS […]

如何在Docker脚本中回答命令行提示

我正在运行一个Dockerfile,如下所示: FROM alexhermstad/arch-pypi2pkgbuild-kolibri MAINTAINER Alex Hermstad USER kol WORKDIR /home/kol/pypi2pkgbuild CMD ["python", "./pypi2pkgbuild.py", "–pre", "kolibri"] 在pypi2pkgbuild.py中,出现一个提示,其中显示: :: Proceed with installation? [Y/n] 是否有反正我可以使用docker自动按'n'跳过安装? 我search了一下,找不到解决这个使用Dockerfile。

为什么bash脚本的工作取决于terminal窗口的大小?

我知道这听起来很奇怪,但这是事情。 我有一个docker容器,托pipe一个数据库。 我有一个脚本,试图一个一个地执行一个补丁。 现在,脚本不知道数据库端口(因为每次容器绑定到不同的端口)。 所以这里是脚本的开始: #!bin/bash echo "Calculating the port…" port=$(docker-compose ps | grep database-docker | sed "s/.*://g" | sed "s/\-.*//") echo "Port is $port" 基本上它应该在docker-compose ps的输出上作出反应,输出如下所示: Name Command State Ports wildfly_database-docker_1 docker-entrypoint.sh mysqld Up 0.0.0.0:32768->3306/tcp 但是,这是事情。 如果我的terminal窗口很小,这个脚本不起作用,端口variables是空的。 如果我全屏扩展terminal窗口,它工作正常,并做我所需要的。 我想这是因为在第一种情况下的输出被分成几行,并且不能被正确parsing。 那么,如何使bash脚本独立于窗口大小工作? UPD 。 我发现解决scheme感谢评论。 这似乎是一个docker写作的问题。 但是,我改变了这一行后 port=$(docker ps | grep database-docker | sed "s/.*://g" | […]

Docker检查数据库是否正在运行

entrypoint.sh包含需要Cassandra的各种cqlsh命令。 没有像script.sh这样的东西,cqlsh命令会失败,因为Cassandra没有足够的时间启动。 当我在本地执行以下操作时,一切似乎都正常工作。 但是,当我通过Docker运行时, script.sh永远不会结束。 换句话说, $status不会从1变为0。 Dockerfile FROM cassandra RUN apt-get update && apt-get install -y netcat RUN mkdir /dir ADD ./scripts /dir/scripts RUN /bin/bash -c 'service cassandra start' RUN /bin/bash -c '/dir/scripts/script.sh' RUN /bin/bash -c '/dir/scripts/entrypoint.sh' script.sh #!/bin/bash set -e cmd="$@" status=$(nc -z localhost 9042; echo $?) echo $status while [ $status != […]

如何停止电源shell脚本的错误?

我有下面的脚本 $ErrorActionPreference = "Stop"; while($true) { try { Write-Host "Step 1"; Dir C:\arts #Error Write-Host "Step 2"; exit 0 break; } catch { "Error in " + $_.InvocationInfo.ScriptName + " at line: " + $_.InvocationInfo.ScriptLineNumber + ", offset: " + $_.InvocationInfo.OffsetInLine + "."; $Error exit 1 break; } } 它停在方向Dir C:\arts线,这对我很好。 据我了解,发生因为我有行$ErrorActionPreference = "Stop"; 在开始。 […]

如何有bash脚本回答交互式提示(没有y / n只)?

我正在尝试使用名为PHPCI的工具来构build一个Docker镜像。 我几乎能够做所有事情,但是当我需要运行创build数据库的设置脚本,设置用户名/密码,以及为工具本身进行某种默认configuration时,出现了第一个问题。 该脚本应该被称为( 见这里 – 从Composer安装): php ./console phpci:install 它会开始提出一些问题。 这是一个被问到的问题的完整例子: ****************** Welcome to PHPCI ****************** Checking requirements… OK Please answer the following questions: ————————————- Please enter your MySQL host [localhost]: Please enter your MySQL database name [phpci]: Please enter your MySQL username [phpci]: Please enter your MySQL password: Your PHPCI URL ("http://phpci.local" for example): […]