ルートレスコンテナ: ネットワーク

更新


TAPデバイス

tap0 (コンテナ側)

# 一般ユーザで実行
image=docker.io/library/alpine:3
podman run --rm -it $image \
  sh -c "wget -O - example.com; ip address"
(中略、例)
2: tap0: <BROADCAST,UP,LOWER_UP> mtu 65520 qdisc fq_codel state UNKNOWN qlen 1000
    link/ether 72:ed:1b:4e:8f:b8 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.100/24 brd 10.0.2.255 scope global tap0
       valid_lft forever preferred_lft forever
    inet6 fe80::70ed:1bff:fe4e:8fb8/64 scope link tentative
       valid_lft forever preferred_lft forever

ポートは1024以降

image=docker.io/library/nginx:stable-alpine
podman run --rm -it --publish 3000:80 $image

# 別の端末で
curl 127.0.0.1:3000

pingはできない

# rootで
sysctl -w "net.ipv4.ping_group_range=0 500000"

# 一般ユーザでpingできる
podman run --rm -it $image ping -c 3 1.1.1.1

ポッド: コンテナの入れ物

ポッド内コンテナは、同じネットワーク名前空間

ポッド作成

podman pod create

pod=myapp # ポッド名
podman pod create --name $pod

ポッドでコンテナ起動

podman run --pod

1つ目のコンテナ: mongoサーバ
image=docker.io/library/mongo:4.4
docker run --rm -dit --pod $pod --name server $image \
  mongod --port 27017
2つ目のコンテナ: mongoシェル
docker run --rm -it --pod $pod $image \
  mongo --port 27017

ポッドのプロセス確認

podman pod top

podman pod top $pod
USER      PID   PPID   %CPU    ELAPSED            TTY     TIME   COMMAND
mongodb   1     0      0.000   25m38.190166571s   pts/0   0s     mongo --port 27017
mongodb   1     0      0.242   27m33.198628278s   pts/0   4s     mongod --port 27017 --bind_ip_all
0         1     0      0.000   33m18.206452253s   ?       0s     /pause