簡體   English   中英

如何在Dockerfile中的CMD或ENTRYPOINT中運行兩個命令

[英]How can I run two commands in CMD or ENTRYPOINT in Dockerfile

Dockerfile構建器中ENTRYPOINTCMD通過使用/bin/sh -c一次運行一次。

是否有任何簡單的解決方案可以在沒有額外腳本的情況下在其中運行兩個命令

在我的情況下,我想在jenkins從節點的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

我在詹金斯奴隸的docker中運行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...

第四:執行類似這樣的步驟

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 :/以前從VCS使用容器中的/ code克隆的共享jenkins工作區的代碼(應用程序代碼)

注意:如果您具有服務依賴性,則可以將無花果用於類似策略。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM