mongodb - 构建 mongo 映像时未找到 systemctl
问题描述
我正在尝试基于官方图像Dockerfile构建一个 mongo 4.4 图像,但我遇到了 systemctl not found 的问题。图像本身有一条线可以在设置后将其删除,但不确定它来自哪里。有任何想法吗?
Setting up mongodb-org-database-tools-extra (4.4.0) ...
Setting up librtmp1:amd64 (2.4+20151223.gitfa8646d.1-1) ...
Setting up libkrb5support0:amd64 (1.16-2ubuntu0.1) ...
Setting up krb5-locales (1.16-2ubuntu0.1) ...
Setting up libkeyutils1:amd64 (1.5.9-9.2ubuntu2) ...
Setting up libk5crypto3:amd64 (1.16-2ubuntu0.1) ...
Setting up libkrb5-3:amd64 (1.16-2ubuntu0.1) ...
Setting up libgssapi-krb5-2:amd64 (1.16-2ubuntu0.1) ...
Setting up libcurl4:amd64 (7.58.0-2ubuntu3.10) ...
Setting up mongodb-database-tools (100.1.1) ...
Setting up mongodb-org-mongos (4.4.0) ...
Setting up mongodb-org-tools (4.4.0) ...
Setting up mongodb-org-server (4.4.0) ...
/var/lib/dpkg/info/mongodb-org-server.postinst: 43: /var/lib/dpkg/info/mongodb-org-server.postinst: systemctl: not found
dpkg: error processing package mongodb-org-server (--configure):
installed mongodb-org-server package post-installation script subprocess returned error exit status 127
Setting up mongodb-org-shell (4.4.0) ...
dpkg: dependency problems prevent configuration of mongodb-org:
mongodb-org depends on mongodb-org-server; however:
Package mongodb-org-server is not configured yet.
dpkg: error processing package mongodb-org (--configure):
dependency problems - leaving unconfigured
Processing triggers for libc-bin (2.27-3ubuntu1.2) ...
Errors were encountered while processing:
mongodb-org-server
mongodb-org
[91mE: Sub-process /usr/bin/dpkg returned an error code (1)
[0mThe command '/bin/sh -c set -x && export DEBIAN_FRONTEND=noninteractive && apt-get update && echo "mongodb-org hold" | dpkg --set-selections && echo "mongodb-org-server hold" | dpkg --set-selections && echo "mongodb-org-shell hold" | dpkg --set-selections && echo "mongodb-org-mongos hold" | dpkg --set-selections && echo "mongodb-org-tools hold" | dpkg --set-selections && apt-get install -y ${MONGO_PACKAGE}=$MONGO_VERSION ${MONGO_PACKAGE}-server=$MONGO_VERSION ${MONGO_PACKAGE}-shell=$MONGO_VERSION ${MONGO_PACKAGE}-mongos=$MONGO_VERSION ${MONGO_PACKAGE}-tools=$MONGO_VERSION && rm -f /usr/local/bin/systemctl && rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/mongodb && mv /etc/mongod.conf /etc/mongod.conf.orig' returned a non-zero code: 100
解决方案
FL3SH 答案有效,但为了更有效地传达含义,您可以创建一个从/bin/systemctl
to的符号链接/bin/true
。
/bin/true
是一个总是返回 0(shell 的真实值)的命令,所以它不会失败。这是表示您想要返回 true 的标准方式。另请参阅此 SO 帖子
您需要在 Dockerfile 中添加的命令是:
RUN ln -s /bin/true /usr/local/bin/systemctl
或者
RUN ln -s /bin/true /bin/systemctl
效果是您通过调用/bin/true
而不是欺骗安装后脚本/bin/systemctl
您可以在官方 mongodb Dockerfile 4.4 第 91 行中找到相同的技巧,haytham 在他的描述中链接了该技巧。
/bin/echo
效果也很好,/bin/true
因为 echo 也返回 0。你可以试试看
echo "test"
echo $?
你会看到 0 作为 second 的结果echo
。
推荐阅读
- visual-studio-code - 有没有办法在主屏幕(空白屏幕)上禁用 vscod 徽标和快捷方式提示?
- google-apps-script - TypeError:无法读取 null main 的属性“getRange”
- python - xlsx 文件中的 datetime.datetime 类型阻止了进程
- database - 根据同一张表中的值获取sql整体
- node.js - 将时间事件与 Node.js 和 Wit.ai 一起用于 Facebook Messenger?
- python - AttributeError:“str”对象没有属性“option_chain”
- java - 如何使用 ISO-8859-6 字符集将十六进制代码编码为字符串?
- python - 你如何检测乌龟窗口何时关闭
- excel - 带有用户表单的活动表
- php - 在 3 张图片之间填充 10px