如何在Dockerfile中的CMD或ENTRYPOINT中运行两个命令

时间:2014-07-30 06:56:00

标签: docker

Dockerfile builderENTRYPOINTCMD一次运行中使用/bin/sh -c

是否有任何简单的解决方案可以在没有额外脚本的情况下运行两个命令

在我的情况下,我想在jenkins slave节点中的docker中设置docker,所以我将docker.sock传递到容器中,我想更改普通用户执行的权限,所以应该完成在sshd命令之前。

法线就像jenkins,它将通过ssh命令登录容器。

$ docker run -d -v /var/run/docker.sock:/docker.sock larrycai/jenkins-slave

larrycai/jenkins-slave Dockerfile中,我希望运行

CMD chmod o+rw /docker.sock && /usr/sbin/sshd -D

目前jenkins已获得sudo权限,请参阅larrycai/jenkins-slave

1 个答案:

答案 0 :(得分:0)

我在jenkins slave的docker中运行docker:

首先:我的奴隶知道运行码头。

第二:我准备了一个知道在docker中运行docker的docker镜像。请参阅dockerfile的一个片段

RUN echo 'deb [trusted=yes] http://myrepo:3142/get.docker.io/ubuntu docker main' > /etc/apt/sources.list.d/docker.list
RUN apt-get update -qq
RUN apt-get install -qqy iptables ca-certificates lxc apt-transport-https lxc-docker
ADD src/wrapdocker /usr/local/bin/wrapdocker
RUN chmod +x /usr/local/bin/wrapdocker
VOLUME /var/lib/docker

第三:在此从属服务器中运行的jenkins作业包含一个.sh文件,其中包含一组用于运行应用程序代码的命令,如:

export RAILS_ENV=test
# Bundle install
bundle install

# spec_no_rails
bundle exec rspec spec_no_rails -I spec_no_rails
bundle exec rake db:migrate:reset
bundle exec rake db:test:prepare
etc...

第四:一个用这样的东西运行shell步骤

docker run --privileged -v /etc/localtime:/etc/localtime:ro -v `pwd`:/code myimagewhorundockerindocker /bin/bash -xec 'cd /code && ./myfile.sh'

- 在docker中运行docker所需的特权

-v / etc / localtime:/ etc / localtime:ro用于同步主机时钟与容器时钟

-v pwd:/ code jenkins workspace(app-code)以前从VCS中使用/ code in container

克隆的代码

注意:如果您有服务依赖项,则可以使用具有类似策略的fig。