Tag: shell

如何在Docker中使用源代码?

我试图在docker中使用virtualenv来实现部署兼容性。 但执行到这一行时出错了: CMD source openparty/bin/activate 我不知道。

我怎样才能运行一个不会退出的命令,直到成功?

我有一个运行HBase的Docker容器请参阅这里了解更多关于它的细节。 基本上,HBase大概需要三十年才能活起来。 显然我有其他容器取决于这一个。 在其中之一,在docker-entrypoint.sh我基本上是这样做的: #!/bin/bash /path/to/command argument while [ $? -ne 0 ]; do sleep 2; /path/to/command argument done 这里的问题是/path/to/command是部署一个Web服务器,它将与HBase容器交互。 如果成功,它会阻塞当前进程(这很好,因为它在一个容器中),但是同样,如果失败,它将打印堆栈跟踪,但不会以某个-ne 0代码退出(实际上,根本不退出)。 事实上,如果它退出–restart=always会处理它。 所以,我的问题是,我怎样才能保持它重试,直到成功,基本上没有退出一些失败代码? 从Docker容器退出也是一个选项,以便它可以保持重新启动直到成功。 现在,我没有机会修改不存在的退出代码。 更新: 我必须这样做: #!/bin/bash tmp=$(mktemp) /path/to/command args 2> "$tmp" & while true; do sleep 5; if [ -s "$tmp" ]; then exit fi done 基本上,我必须在后台运行它,以便上面的脚本将继续执行( path/to/command是一个UI阻止命令 – 如listen服务器 – 成功时不会退出 […]

不能pipe道泊坞窗pash命令

我通常想在Docker镜像上打开一个bash shell。 一个多命令的过程是这样的: $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bba983d72d48 scubbo/datenight "apachectl -DFOREGROU" 7 days ago Up 7 days 0.0.0.0:80->80/tcp pensive_bell $ docker exec -it bba983d72d48 bash 我想简化这个。 但是,我得到以下错误: $ docker ps | awk 'NR > 1 {print $1}' | xargs -I {} docker exec -it {} bash cannot enable […]

Docker组合将不会find$ PWD环境variables

这是我的docker组成: version: '2' services: couchpotato: build: context: ./couchpotato dockerfile: Dockerfile ports: – 5050:5050 volumes: – "${PWD}/couchpotato/data:/home/CouchPotato/data/" – "${PWD}/couchpotato/config:/home/CouchPotato/config/" 当我在shell中运行它时,在docker-compose.yml的目录中,我得到: WARNING: The PWD variable is not set. Defaulting to a blank string. 并且编写以PWD为空开始。 我没有看到文件中的任何错误,如下所示: https : //docs.docker.com/compose/environment-variables/

语法错误附近的意外令牌“(”执行shell脚本为mongo数据库

我正在尝试创build一个用于pipe理mongo db及其默认内容的Dockerfile 。 这里是docker文件和相关的shell脚本 – DockerFile – # Dockerizing MongoDB: Dockerfile for building MongoDB images # Based on ubuntu:16.04, installs MongoDB following the instructions from: # http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/ FROM ubuntu:16.04 # Installation: # Import MongoDB public GPG key AND create a MongoDB list file RUN apt-key adv –keyserver hkp://keyserver.ubuntu.com:80 –recv EA312927 RUN echo "deb http://repo.mongodb.org/apt/ubuntu $(cat […]

在Dockerfile中将数据写入文件

我有一个shell脚本script.sh,它将一些行写入一个文件: #!/usr/bin/env bash printf "blah blah blah blah\n" | sudo tee file.txt 现在在我的Dockerfile中,我添加这个脚本并运行它,然后尝试添加生成的file.txt : ADD script.sh . RUN chmod 755 script.sh && ./script.sh ADD file.txt . 当我这样做,我只是得到一个错误引用ADD file.txt . 命令: lstat file.txt: no such file or directory 为什么docker不能find我的shell脚本生成的文件? 我能在哪里find它?

docker工人运行没有主机卷的本地脚本

目标是在数据库容器运行后,使用curl从下载中将数据添加到多容器Web应用程序的数据库服务器容器中。 我可以通过docker-compose.yml或独立于Web应用程序的docker运行来实现,只要我使用主机卷即可。 如何在不使用主机卷或Web应用程序特定的Docker文件的情况下执行此操作? Docker撰写与主机卷的例子: dbinit: build: ./webtools_config/initdb command: bash -c "/tmp/webtools_config/dbinit.sh" volumes: – ./webtools_config:/tmp/webtools_config links: – db1 – db2 docker运行的例子,我想将脚本文件本地传递给docker 客户端 ,如./dbinit.sh: docker run -a stdin -a stdout -i -t \ –link dir_db1_1:db1 \ –link dir_db2_1:db2 \ initdb /bin/sh -c "./dbinit.sh"

当使用docker / fig运行Django dev服务器时,为什么一些日志输出被隐藏了?

我正在写一个Dockerfile,它需要运行多个命令作为CMD指令的一部分,我认为正确的方法是运行一个shell脚本,通过exec执行主守护进程。 不幸的是,作为这个过程的一部分,我的一些输出(stdout?stderr?我不知道,我也不知道如何发现)会丢失。 这是shell脚本: #!/bin/sh python manage.py migrate exec python manage.py runserver 0.0.0.0:8000 这个想法是, migrate命令只运行一次,其输出显示,然后runserver命令应该接pipe,容器运行,直到该进程退出。 实际的问题是migrate的输出显示正确,但runserver的直接输出不显示。 奇怪的是,以后的runserver请求logging显示得很好。 为了澄清,这是我期望的输出: […] No migrations to apply. […] Starting development server at http://0.0.0.0:8000/ Quit the server with CONTROL-C. [21/Jan/2015 16:27:06] "GET / HTTP/1.1" 200 15829 这是我得到的东西: […] No migrations to apply. […] [21/Jan/2015 16:27:06] "GET / HTTP/1.1" 200 15829 我甚至不知道这是谁的错。 […]

克隆/快照的Docker容器包括他们的数据的脚本?

我想克隆包含所有数据的dockerized应用程序,在这个例子中使用三个容器:1)一个web应用程序容器,如CMS,2)数据库容器和3)数据卷容器(使用docker卷) 。 使用docker-compose,我可以轻松地创build这些容器的相同实例,只需要初始数据。 但是,如果我想用克隆KVM容器的相似方式克隆同一台服务器上的一组正在运行的容器(包括其所有累积的数据),那又如何呢? 使用KVM,我会暂停或closures虚拟机,克隆一些类似virt-clone的东西,然后启动克隆的guest虚拟机,它具有与原始数据相同的数据。 一个用例是在进行重大更改之前或者在安装新版本的插件之前创build正在运行的开发Web服务器的克隆/快照。 对于Docker来说,这看起来并不那么简单,因为数据不会自动与容器一起复制。 理想情况下,我想做一些像docker-compose clone这样简单的事情,并最终得到与第一组相同的第二组容器,包括所有的数据。 Docker和Docker-compose都不提供克隆命令(从版本1.8开始),因此我需要考虑各种方法,如备份和恢复数据/数据库或使用Flocker等第三方工具。 与此相关的是如何做一个类似于dockerized应用程序的KVM快照的问题,能够轻松地返回到以前的状态。 优选地,克隆,快照和恢复应该是可能的,并具有最小的停机时间。 什么是首选的Docker完成这些事情的方式? 编辑:基于第一个答案,我会让我的问题更具体一点,以便有希望到达编程步骤,以便能够使用bash或python脚本来执行诸如docker-compose-clone和docker-compose-snapshot操作。 克隆docker卷的内容似乎是关键,因为每次我在相同的yaml文件上运行docker-compose时,容器本身都基本被克隆。 通常我的完整克隆脚本将需要 复制包含docker-compose文件的目录 暂时停止集装箱 创build(但不一定运行)第二组容器 确定要复制的数据卷 备份这些数据卷 将数据卷还原到克隆的数据容器中 启动第二组容器 这是否是正确的方式去做,我应该如何执行这个? 我特别不确定如何在脚本中执行步骤4( 确定要复制的数据卷 ),因为命令docker volume ls只能在Docker 1.9中使用。 我怎样才能使用这种方法做类似于KVM快照? (可能使用ZFS中的COW文件系统function,这是我的Docker安装已经使用的function)。

如何检查docker守护进程是否正在运行?

我正在尝试创build一个bash实用程序脚本来检查docker守护程序是否在我的服务器上运行。 有没有更好的方法来检查docker守护进程是否在我的服务器上运行,而不是运行这样的代码? ps -ef | grep docker root 1250 1 0 13:28 ? 00:00:04 /usr/bin/dockerd –selinux-enabled root 1598 1250 0 13:28 ? 00:00:00 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock –shim docker-containerd-shim –metrics-interval=0 –start-timeout 2m –state-dir /var/run/docker/libcontainerd/containerd –runtime docker-runc root 10997 10916 0 19:47 pts/0 00:00:00 grep –color=auto docker 我想创build一个bash shell脚本来检查我的docker守护进程是否正在运行。 如果它正在运行,则不要执行任何操作,但是如果没有,则会启动docker守护进程。 我的伪代码是这样的。 我正在考虑parsing我的ps -ef的输出,但我只想知道是否有更有效的方法来做我的伪代码。 如果(docker不在运行) run docker 结束 […]