docker - Systemd 从未在容器中分配 pid 0
问题描述
我正在尝试建立持续集成管道,这需要我在容器内安装一个 abc.deb 文件。
debian/control 文件确实包括:
Depends: ${python3:Depends}, ${misc:Depends}, python3-webpy, systemd
debian/rules 文件包括(仅相关部分如下所示):
%:
dh $@ --with=python3,systemd
override_dh_systemd_start:
dh_systemd_start -p<application>
override_dh_installinit:
dh_systemd_start
我的 Dockerfile 看起来像:
FROM <relevant base image>
COPY results/*.deb /packages/
RUN export DEBIAN_FRONTEND=noninteractive && apt-get update && \
apt-get install -y --no-install-recommends --auto-remove \
dumb-init \
procps \
/packages/*.deb && \
apt-get autoremove -y && \
apt-get autoclean -y && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /var/cache/apt
CMD tail -f /dev/null
当我在 docker 中使用 docker exec 并执行 ps aux 时,我得到:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 2388 756 ? Ss 11:51 0:00 /bin/sh -c tail -f /dev/null
我怎样才能将 systemd 设置为 PID 1 ?曾经说过愚蠢的初始化!
我尝试查看多篇文章,似乎不可能,需要确认。好的是(仅举几例):
https://lwn.net/Articles/676831/
https://blog.phusion.nl/2015/01/20/docker-and-the-pid-1-zombie-reaping-problem/
解决方案
推荐阅读
- spring - keycloak 弹簧适配器范围映射
- javascript - 将带参数的函数传递给映射元素
- corda - Corda 中的帐户保险库查询
- java - Java PreparedStatement executeBatch 方法抛出主键的唯一约束
- r - 在 R 中使用 ggplot2 进行函数式编程 - NSE
- python - pyautogui.screenshot() 捕获的放大/缩小图像
- python - 如何在包含相同字符的字符串中按索引替换字符
- android-studio - 到达断点时将断开调试模式
- c++ - 空子对象优化
- rust - 如何在 Rust 中操作二进制数?