首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker将一个变量传入运行git克隆的shell脚本。

Docker将一个变量传入运行git克隆的shell脚本。
EN

Stack Overflow用户
提问于 2017-06-04 10:08:12
回答 1查看 1.8K关注 0票数 4

我正在创建一个Dockerfile,作为这个文件的一部分,我希望给最终用户传递他们的give的选项。

我查看了this SO post和其他几个站点,但仍然停留在git clone语法上。

git克隆命令返回一个错误,因为它的一部分变量在docker build阶段不包含一个值。

我有一个名为gitclone.sh的bash脚本

代码语言:javascript
复制
#!/bin/bash
git clone $1 /app

在我的Dockerfile中,我有这样一行:

RUN ./gitclone.sh $LOCATION

shell脚本具有正确的运行权限,并且在从容器中运行它时可以工作,因为我要将一个实际的存储库传递给它。

在Docker构建阶段,我得到以下错误:

致命:存储库'/app‘不存在

目录在那里,但是$1是空的,命令不能工作。

问题如何使Dockerfile工作?我想要的输出:

docker run -e LOCATION=https://github.com/something.git -d jwknz/pg02

更新更改我的Dockerfile以包含CMD ["../gitclone.sh","$LOCATION"]而不是RUN ./gitclone.sh $LOCATION并不能修复它。

Dockerfile将生成,但容器在运行docker run命令后停止。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-04 11:31:24

首先,您必须注意到,Dockerfile用于构建映像(使用docker build命令),docker run用于从已经构建的停靠库映像启动容器。

您必须定义一个入口点脚本。这是一个脚本,每次从用Dockerfile构建的映像启动容器时都会执行该脚本。

假设您想克隆一个git,然后运行apache,那么您可以在Dockerfile所在的文件夹中创建这样一个脚本。给它命名,例如gitCloneAndRunHttpd.sh

代码语言:javascript
复制
#!/bin/bash 

git clone $LOCATION /app 
/usr/local/apache2/bin/apachectl -f /usr/local/apache2/conf/httpd.conf 

然后,您必须修改您的Dockerfile通知停靠库,将脚本文件复制到您的停靠库映像中,使其可执行,并告诉它在容器创建时运行它:

代码语言:javascript
复制
[...]

COPY ["gitCloneAndRunHttpd.sh", "/gitCloneAndRunHttpd.sh"]
RUN chmod +x /gitCloneAndRunHttpd.sh
ENTRYPOINT ["/gitCloneAndRunHttpd.sh"]

在此之后,您可以使用docker build命令构建您的对接者映像,然后可以从您的映像开始创建容器。

每次使用docker run -e LOCATION=https://github.com/some-git-repo.url -d your/image从容器中启动容器时,都会将回购https://github.com/some-git-repo.url从容器中克隆到/app文件夹中,并启动apache。

注意:如果您想知道您提到的SO post中发生了什么,那么使用默认的入口点(/bin/sh),而/file.sh abc是传递给该入口点的参数,因此执行file.sh脚本。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44352933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档