35 lines
1.4 KiB
YAML
35 lines
1.4 KiB
YAML
|
services:
|
|||
|
sometools:
|
|||
|
# 对于 docker compose 来说,没法指定容器来共享 pid,需要固定容器名称,来给下面的另一个容器使用
|
|||
|
container_name: sometools
|
|||
|
# demo 用的,这里刻意区分了debian版本
|
|||
|
image: debian:buster
|
|||
|
# 核心是 echo $$ > /shared-pid/tool-container.pid, $$ 是自身 PID
|
|||
|
# echo 以后就闲置了,开始昏睡
|
|||
|
# 四个$是因为,yaml中两个$表示一个$,我们需要$$
|
|||
|
command: bash -c 'set -x; echo $$$$ > /shared-pid/tool-container.pid; while true; do sleep 100000; done'
|
|||
|
volumes:
|
|||
|
# 这个卷两个容器共享
|
|||
|
- shared-pid:/shared-pid
|
|||
|
do-something-here:
|
|||
|
image: debian:bookworm
|
|||
|
# 核心是 nsenter,进入到另一个容器的命名空间去执行命令
|
|||
|
# 应该会看到另一个容器的系统版本
|
|||
|
command: bash -c 'set -x; nsenter -t $(cat /shared-pid/tool-container.pid) -m cat /etc/os-release; echo 'exec into this container and run nsenter'; while true; do sleep 10000; done'
|
|||
|
volumes:
|
|||
|
# 这个卷两个容器共享
|
|||
|
- shared-pid:/shared-pid
|
|||
|
# 共用上面容器的 PID 命名空间
|
|||
|
pid: container:sometools
|
|||
|
# 在上面这个容器启动后再启动,因为需要等待新建 PID 命名空间
|
|||
|
depends_on:
|
|||
|
- sometools
|
|||
|
# 对于有一些情况,需要特权
|
|||
|
cap_add:
|
|||
|
- CAP_SYS_ADMIN
|
|||
|
# 实在不行就开特权
|
|||
|
# privileged: true
|
|||
|
|
|||
|
volumes:
|
|||
|
shared-pid:
|