代码之家  ›  专栏  ›  技术社区  ›  jrtapsell

编译MongoDB 3.6.5插入Docker镜像

  •  1
  • jrtapsell  · 技术社区  · 6 年前

    背景

    我试图从标记r3.6.5的代码中编译mongodb(目前是mongos二进制文件,但我认为这个问题适用于所有可执行文件),并使用创建的二进制文件替换mongodb docker映像中的二进制文件。

    运行此命令:

    docker run --rm -ti mongo mongos --version
    

    返回以下内容:

    mongos version v3.6.5
    git version: a20ecd3e3a174162052ff99913bc2ca9a839d618
    OpenSSL version: OpenSSL 1.0.1t  3 May 2016
    allocator: tcmalloc
    modules: none
    build environment:
        distmod: debian81
        distarch: x86_64
        target_arch: x86_64
    

    发行

    编译检查之一是:

    Checking if C compiler is GCC 5.3.0 or newer...no
    Checking if C++ compiler is GCC 5.3.0 or newer...no
    

    如果我使用的gcc版本大于5.1.0,则在尝试在注入可执行文件的情况下运行容器时会收到以下消息:

    mongos: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by mongos)
    

    根据 this page 我需要使用gcc<5.1.0来避免这种情况,但我也需要使用gcc>5.3.0来编译分支,所以如何同时执行这两项操作?

    1 回复  |  直到 6 年前
        1
  •  1
  •   acm    6 年前

    Docker映像需要包含一个C++运行时,该运行时不早于从源代码编译MongoDB所用的系统运行时。您可以使用 --disable-minimum-compiler-version-enforcement 标记,但我不能建议这样做:生成系统出于某种原因强制执行gcc 5.4。如果你的docker镜像没有gcc 5.4+运行时,除了基于一个更新的系统创建一个新的docker镜像外,你没有什么可以做的。