【问题标题】:make a docker image created in pre_build available for the build phase on docker hub?使在 pre_build 中创建的 docker 映像可用于 docker hub 上的构建阶段?
【发布时间】:2021-02-09 18:07:05
【问题描述】:

我尝试创建一个基于 Oracle 数据库 XE 的 docker 映像。

情况有点特殊。 Oracle 提供了一个repository,其中包含创建此类映像所需的脚本。这些图像不能直接在 docker hub 上使用。

脚本创建一个名为oracle/database:18.4.0-xe的图像

我使用该图像通过COPY 语句复制某些文件。见Dockerfile

我的想法是使用 pre_build 脚本克隆 oracle 存储库,创建该映像,然后简单地在 docker hub 上运行构建。但似乎已创建图像,但在构建阶段不可用。 COPY 语句失败,因为找不到该图像。

是否还有其他事情要做,以使该图像在构建阶段可用?

【问题讨论】:

    标签: docker dockerhub


    【解决方案1】:

    我设法通过在 Dockerfile 中添加另一个 FROM 来完成这项工作

    FROM diemobiliar/oraclexe-image:18.4.0-xe as oraclexe
    
    FROM oraclelinux:7-slim
    
    COPY --from=oraclexe --chown=oracle:oinstall\
      ${ORACLE_HOME}/lib/libsqlplus.so\
    

    并将图像上传到自己的存储库中。不知道为什么这在本地有效,但在 docker hub 上构建期间无效。我假设一些 Docker 版本问题。在 pre_build 脚本中创建的 docker 镜像在构建阶段也是可见的,只有 copy --from=... 语句目前似乎在直接引用镜像方面存在一些问题。

    互联网上有更多使用该语法但也依赖于 BuildKit 的示例(即使对于我的用例,这可能更优雅,但我还没有尝试过)。

    无论如何,找到了某种解决方法,所以现在我很好。

    【讨论】:

    • 我不知道 diemobiliar oracle 映像中的确切内容,但它应该是您从以下来源构建的内容:github.com/oracle/docker-images/tree/main/OracleDatabase/… 如果您查看位于 github.com/diemobiliar/minimized-oraclexe-image 的 diemobiliar 源代码,它们有一个最小化的该图像设置的版本。但是,他们似乎已经从映像本身中删除了诸如 docker entrypoint initdb 之类的东西。
    • 这里的这个问题与那里的存储库完全相关,以便能够将图像发布到 dockerhub。我会看看报告的问题。
    • 仅供参考,我昨天才开始查看那个 repo。 dockerfile 看起来简直是一场噩梦,但我的 fork 目前正在开发一个清理过的版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    相关资源
    最近更新 更多