【问题标题】:Docker file to clone the files which are in gitDocker 文件克隆 git 中的文件
【发布时间】:2018-10-29 09:41:11
【问题描述】:

我有 50 个应用程序的 server.xml 文件,这些文件对所有应用程序都不同。我需要为所有应用程序编写一个 docker 文件来获取该 server.xml。

server.xml 在哪里:Gitserver 私有仓库仅使用基于 ssh 的克隆 我不能只为单个 server.xml 文件克隆完整的 repo

获取该文件并成为 dockerfile 一部分的最佳方法是什么? 有什么办法可以代替保留在 dockerfile 中?

【问题讨论】:

  • 您确实需要更清楚地说明您要做什么。每个应用程序都有不同的 server.xml 和自己的 github 存储库?您需要 50 个不同的 Docker 容器?为什么不希望将 server.xml 放在 Docker 容器中? (“保留在 dockerfile 中”实际上没有意义)。
  • 所有这些 xml 文件都将成为 docker 镜像的一部分。所以为了保留镜像,我应该从 git repo 中提取我使用 docker 文件的文件。对于您的 qstnn 每个应用程序都有不同的 server.xml 和自己的 github 存储库?不,我们有一个私有存储库,其中包含与应用程序相关的所有文件。所以我需要获取这些文件并且应该是图像的一部分

标签: git docker dockerfile docker-image


【解决方案1】:

您可以use an argument 拉取 xml 文件,然后将其构建到映像中。

FROM alpine
ARG SERVER_CONF
RUN curl ${SERVER_CONF}
EXEC server.sh

然后就可以运行 build 并传入 xml 文件的位置

docker build --build-arg SERVER_CONF=http://localhost/server.xml

或者,您可以将其设置为环境变量,以便您可以在运行时获取 xml 文件。

FROM alpine
ARG SERVER_CONF
ENV SERVER_CONF=${SERVER_CONF}
RUN server.sh --config=$SERVER_CONF

这将允许您在构建映像时动态设置配置。

如果您想在运行时设置配置,那么您可以在启动 docker 容器时将其作为环境变量传递

FROM alpine
RUN server.sh --config=$SERVER_CONF

然后通过passing in the environment variable启动你的容器

docker run -e "SERVER_CONF=http://localhost/server.xml" server

您不必传递 url,您可以将 xml 文件的全部内容作为字符串传递。您可以在应用程序启动之前使用entry point 将环境的内容写入文件。

【讨论】:

  • server.sh 由什么组成?
  • 所有的 xml 文件都在 git 仓库中,所以我不能使用 curl 来抓取 xml 文件。
【解决方案2】:

有什么办法可以代替保存在 dockerfile 中?

只要您已获取该 server.xml(或只是将其内容复制到本地文件),您就可以:

  • COPY it in your Dockerfile
  • 或将其放在可远程访问的公共场所,您的容器可以在运行时从中获取(而不必尝试克隆私有存储库,而您的容器不应该这样做)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 2014-11-25
    • 2016-10-25
    • 2019-01-12
    相关资源
    最近更新 更多