Docker:在图像创建过程中修改文件

时间:2016-08-15 07:55:02

标签: docker dockerfile

我正在为Atlassian JIRA创建一个Docker镜像。 Dockerfile可以在这里找到:https://github.com/joelcraenhals/docker-jira/blob/master/Dockerfile

但是,我想在映像创建期间在Docker映像内的Tomcat服务器上启用HTTPS连接器,以便在映像创建期间配置server.xml文件。

如何修改容器中的某个文件?

致以最诚挚的问候,

2 个答案:

答案 0 :(得分:0)

您需要使用自定义配置文件扩展此图片,使用以下内容编写自己的Dockerfile

FROM <docker-jira image name>:<tag>

COPY <path to the server.xml on your computer, relative to Dockerfile dir> <path to desired location of server.xml inside the container>

之后,您需要构建并运行新图像:

docker build . --tag <name of your image>
docker run <name of your image>

答案 1 :(得分:0)

备选方案a) 我会说你在这里走错了路。您不希望在图像创建期间执行此操作,而是在入口点期间执行此操作。

在第一个容器启动期间配置服务的码头工具是非常常见且最佳的做法,例如为数据库设定种子,生成密码和种子,并在您的情况下,根据模板生成配置。

通常这些配置文件由传递给docker run的ENV变量控制,或者更确切地说在docker-compose.yml中控制,在更复杂的环境中,配置变量的来源可以是consul或etcd。

对于您的示例,例如你可以引入一个ENV变量'USE_SSL'然后在你的入口点使用sed来替换server.xml中设置的东西,但是因为你需要更多东西,比如设置revers_proxy域和东西,你应该使用分蘖:https://github.com/markround/tiller

创建一个server.xml.erb文件,放置你想要动态的变量,如果你想在未设置USE_SSL的情况下排除一个部分,则使用条件,并让tiller使用ENVIRONMENT作为数据源。

备选方案b) 如果你真的想继续使用“on image build”概念(不推荐),你应该使用所谓的build_args https://docs.docker.com/engine/reference/commandline/build/

将此添加到您的泊坞窗文件

ARG USE_SSL

RUN /some_script_you_created_to_generate_server_xml.sh $USE_SSL

你仍然需要一个bash /任何脚本some_script_you_created_to_generate_server_xml.sh,它接受​​args,并根据条件创建,无论你想要什么。当物品变大时(与运行一些seds / awks相比),Tiller会更方便

然后,在构建图像时,您可以使用 `码头建造。 --build-arg USE_SSL = no -t yourtag