{"id":370558,"date":"2024-05-21T04:27:58","date_gmt":"2024-05-21T04:27:58","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=370558"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=370558","title":{"rendered":"<span>\u0418\u0437\u0443\u0447\u0430\u0435\u043c \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0441\u0442\u0435\u043a \u0434\u043e\u043a\u0435\u0440\u0430 \u0432 rootless mode<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/3t\/us\/dp\/3tusdpjtazhqohr5sfv8jetf4u0.png\" data-src=\"https:\/\/habrastorage.org\/webt\/3t\/us\/dp\/3tusdpjtazhqohr5sfv8jetf4u0.png\"\/><br \/>  \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u0434\u043e\u043a\u0435\u0440\u043e\u043c \u0432 rootless mode \u0438 \u043f\u043e \u043f\u0440\u0438\u0432\u044b\u0447\u043a\u0435 \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0435\u0433\u043e \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u043d\u0430 \u0445\u043e\u0441\u0442\u0435. \u041a \u0441\u0432\u043e\u0435\u043c\u0443 \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u044e \u044f \u0438\u0445 \u043d\u0435 \u0443\u0432\u0438\u0434\u0435\u043b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0447\u0430\u043b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a \u0436\u0435 \u0432 \u043d\u0435\u043c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0441\u0435\u0442\u0435\u0432\u043e\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u044f \u0438 \u043f\u043e\u0434\u0435\u043b\u044e\u0441\u044c \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<p>\u0421\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0437\u043d\u0430\u043d\u0438\u0435 Linux \u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0441\u0442\u0435\u043a\u0430 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0434\u043e\u043a\u0435\u0440\u0430.<\/p>\n<p>  <\/p>\n<h2 id=\"zachem-nuzhna-rootless-mode\">\u0417\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u043d\u0430 rootless mode<\/h2>\n<p>  <\/p>\n<p>\u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e <a href=\"https:\/\/docs.docker.com\/engine\/security\/rootless\/\" rel=\"nofollow noopener noreferrer\">\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043c\u0430\u043d\u0443\u0430\u043b\u0443<\/a> \u2014 &#171;rootless mode \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0434\u0435\u043c\u043e\u043d \u0434\u043e\u043a\u0435\u0440\u0430 \u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0438\u0437 \u043f\u043e\u0434 \u043d\u0435\u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0434\u043b\u044f \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0432 \u0434\u0435\u043c\u043e\u043d\u0435 \u0438 \u0441\u0440\u0435\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432. \u041f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0438 \u0440\u0443\u0442\u0430 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0434\u043e\u043a\u0435\u0440\u0430&#187;<\/p>\n<p>  <\/p>\n<h2 id=\"ustanovka-dokera-v-rootless-mode\">\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0434\u043e\u043a\u0435\u0440\u0430 \u0432 rootless mode<\/h2>\n<p>  <\/p>\n<p>\u0421\u0442\u0430\u0432\u0438\u043c rootless \u0434\u043e\u043a\u0435\u0440 \u043f\u043e <a href=\"https:\/\/docs.docker.com\/engine\/security\/rootless\/\" rel=\"nofollow noopener noreferrer\">\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0441 \u0441\u0430\u0439\u0442\u0430<\/a>. \u0425\u043e\u0441\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u2014 Ubuntu 20.04:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">sudo apt-get install -y dbus-user-session uidmap slirp4netns curl -fsSL https:\/\/get.docker.com\/rootless | sh export PATH=\/home\/user\/bin:$PATH systemctl --user start docker<\/code><\/pre>\n<p>  <\/p>\n<h2 id=\"analiz-processov-i-setevogo-okruzheniya-hosta\">\u0410\u043d\u0430\u043b\u0438\u0437 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0445\u043e\u0441\u0442\u0430<\/h2>\n<p>  <\/p>\n<p>\u0418\u0449\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0434\u043e\u043a\u0435\u0440\u0430. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 <code>rootlesskit<\/code> \u043f\u043e\u0440\u043e\u0434\u0438\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0445. <code>ps aux<\/code> \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043a\u0430\u0436\u0435\u0442, \u0447\u0442\u043e \u044d\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c user:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">user@rootless:~$ ps axf | grep docker -A 10 ---    8075 ?        Ssl    0:00  \\_ rootlesskit --state-dir=\/run\/user\/1001\/dockerd-rootless --net=slirp4netns --mtu=65520 --slirp4netns-sandbox=auto --slirp4netns-seccomp=auto --disable-host-loopback --port-driver=builtin --copy-up=\/etc --copy-up=\/run --propagation=rslave \/home\/user\/bin\/dockerd-rootless.sh    8085 ?        Sl     0:00      \\_ \/proc\/self\/exe --state-dir=\/run\/user\/1001\/dockerd-rootless --net=slirp4netns --mtu=65520 --slirp4netns-sandbox=auto --slirp4netns-seccomp=auto --disable-host-loopback --port-driver=builtin --copy-up=\/etc --copy-up=\/run --propagation=rslave \/home\/user\/bin\/dockerd-rootless.sh    8105 ?        Sl     0:00      |   \\_ dockerd    8120 ?        Ssl    0:00      |       \\_ containerd --config \/run\/user\/1001\/docker\/containerd\/containerd.toml    8097 ?        S      0:00      \\_ slirp4netns --mtu 65520 -r 3 --disable-host-loopback --enable-sandbox --enable-seccomp 8085 tap0<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0441\u0435\u0442\u0435\u0432\u043e\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435. \u0414\u043e\u043a\u0435\u0440\u0430 \u043d\u0435 \u0432\u0438\u0434\u043d\u043e (\u043d\u0435\u0442 \u0431\u0440\u0438\u0434\u0436\u0435\u0439 \u0434\u043e\u043a\u0435\u0440\u0430), \u043f\u0440\u0430\u0432\u0438\u043b\u0430 iptables \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">user@rootless:~$ ip a --- 1: lo: &lt;LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000     link\/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00     inet 127.0.0.1\/8 scope host lo        valid_lft forever preferred_lft forever     inet6 ::1\/128 scope host         valid_lft forever preferred_lft forever 2: enp1s0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000     link\/ether 52:54:00:9a:0c:7e brd ff:ff:ff:ff:ff:ff     inet 192.168.122.49\/24 brd 192.168.122.255 scope global dynamic enp1s0        valid_lft 2349sec preferred_lft 2349sec     inet6 fe80::5054:ff:fe9a:c7e\/64 scope link         valid_lft forever preferred_lft forever  user@rootless:~$ ip rule --- 0:  from all lookup local 32766:  from all lookup main 32767:  from all lookup default  user@rootless:~$ ip r --- default via 192.168.122.1 dev enp1s0 proto dhcp src 192.168.122.49 metric 100  192.168.122.0\/24 dev enp1s0 proto kernel scope link src 192.168.122.49  192.168.122.1 dev enp1s0 proto dhcp scope link src 192.168.122.49 metric 100  user@rootless:~$ sudo iptables-save # Generated by iptables-save v1.8.4 on Sun Mar 10 16:54:51 2024 *nat :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] COMMIT # Completed on Sun Mar 10 16:54:51 2024 # Generated by iptables-save v1.8.4 on Sun Mar 10 16:54:51 2024 *filter :INPUT ACCEPT [59111:116799888] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [45917:5706873] COMMIT # Completed on Sun Mar 10 16:54:51 2024<\/code><\/pre>\n<p>  <\/p>\n<h2 id=\"setevoy-neymspeys-dokera-dostup-naruzhu\">\u0421\u0435\u0442\u0435\u0432\u043e\u0439 \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441 \u0434\u043e\u043a\u0435\u0440\u0430. \u0414\u043e\u0441\u0442\u0443\u043f \u043d\u0430\u0440\u0443\u0436\u0443<\/h2>\n<p>  <\/p>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043d\u0430\u0439\u0442\u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u043a\u0435\u0440\u043e\u043c (\u0434\u0430\u043b\u0435\u0435 \u2014 <code>docker_net_ns<\/code>). \u0412\u0438\u0434\u0438\u043c \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0434\u043e\u043a\u0435\u0440\u0430 8085, \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0441\u0435\u0442\u0435\u0432\u043e\u043c \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">user@rootless:~$ sudo lsns -t net ---         NS TYPE NPROCS   PID USER    NETNSID NSFS COMMAND 4026531992 net     125     1 root unassigned      \/sbin\/init 4026532352 net       3  8085 user unassigned      \/proc\/self\/exe --state-dir=\/run\/user\/1001\/dockerd-rootless --net=sli<\/code><\/pre>\n<p>  <\/p>\n<p>\u0417\u0430\u0445\u043e\u0434\u0438\u043c \u0432 docker_net_ns \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435. \u041f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0434\u043b\u044f \u0434\u043e\u043a\u0435\u0440\u0430 \u0431\u0440\u0438\u0434\u0436 <code>docker0<\/code> \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 iptables, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0434\u043b\u044f \u0434\u043e\u043a\u0435\u0440\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <code>tap0<\/code>. \u041e\u0431\u044b\u0447\u043d\u043e \u043a \u0442\u0430\u043a\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0438\u0442\u0430\u0435\u0442 \u0438\u0437 \u043d\u0435\u0433\u043e \u043f\u0440\u0438\u0448\u0435\u0434\u0448\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u044b, \u043a\u0430\u043a-\u0442\u043e \u0438\u0445 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0430\u043b\u044c\u0448\u0435 \u0432 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0441\u0442\u0435\u043a \u041e\u0421 (\u0438\u043b\u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u0430\u043a\u0435\u0442\u044b \u0438\u0437\u0432\u043d\u0435 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0438\u0445 \u0432 <code>tap<\/code> \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441). OpenVPN \u2014 \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430. <\/p>\n<p>  <\/p>\n<p>\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0447\u0442\u043e \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u0447\u0435\u0440\u0435\u0437 <code>tap0<\/code> \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">user@rootless:~$ sudo nsenter -t 8085 -n bash # docker_net_ns root@rootless:\/home\/user# ip a --- 1: lo: &lt;LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000     link\/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00     inet 127.0.0.1\/8 scope host lo        valid_lft forever preferred_lft forever     inet6 ::1\/128 scope host         valid_lft forever preferred_lft forever 2: tap0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP> mtu 65520 qdisc fq_codel state UP group default qlen 1000     link\/ether 32:1d:f0:be:4b:1e brd ff:ff:ff:ff:ff:ff     inet 10.0.2.100\/24 scope global tap0        valid_lft forever preferred_lft forever     inet6 fe80::301d:f0ff:febe:4b1e\/64 scope link         valid_lft forever preferred_lft forever 3: docker0: &lt;NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default      link\/ether 02:42:2b:35:4b:6f brd ff:ff:ff:ff:ff:ff     inet 172.17.0.1\/16 brd 172.17.255.255 scope global docker0        valid_lft forever preferred_lft forever  root@rootless:\/home\/user# ip r --- default via 10.0.2.2 dev tap0  10.0.2.0\/24 dev tap0 proto kernel scope link src 10.0.2.100  172.17.0.0\/16 dev docker0 proto kernel scope link src 172.17.0.1   root@rootless:\/home\/user# iptables-save --- # Generated by iptables-save v1.8.4 on Sun Mar 10 17:13:25 2024 *nat :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [1:40] :POSTROUTING ACCEPT [1:40] :DOCKER - [0:0] -A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER -A OUTPUT ! -d 127.0.0.0\/8 -m addrtype --dst-type LOCAL -j DOCKER -A POSTROUTING -s 172.17.0.0\/16 ! -o docker0 -j MASQUERADE -A DOCKER -i docker0 -j RETURN COMMIT ...<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u043c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 8097 (<code>slirp4netns<\/code>), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c <code>tap0<\/code> \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 <code>slirp4netns --mtu 65520 -r 3 --disable-host-loopback --enable-sandbox --enable-seccomp 8085 tap0<\/code>. \u0418\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0442\u0440\u0430\u0444\u0438\u043a \u0438\u0437 docker_net_ns \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 <code>tap0<\/code> (\u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0443 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e) \u0438, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c <code>slirp4netns<\/code>, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u043c \u0432 \u0441\u0435\u0442\u0435\u0432\u043e\u043c \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0435 \u0445\u043e\u0441\u0442\u0430. <\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u044d\u0442\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c <code>slirp4netns<\/code> \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b. \u0412\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043a tun\/tap \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u0447\u0435\u0440\u0435\u0437 fd (file descriptor) 6:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\"># \u0445\u043e\u0441\u0442 user@rootless:~$ lsof -p 8097 --- COMMAND    PID USER   FD   TYPE             DEVICE SIZE\/OFF  NODE NAME ... slirp4net 8097 user    6u   CHR             10,200     0t98   137 \/dev\/net\/tun <\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c <code>ping 8.8.8.8<\/code> \u0438\u0437 docker_net_ns, \u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c\u0441\u044f \u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 <code>slirp4netns<\/code> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e strace. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 <code>slirp4netns<\/code> \u0447\u0438\u0442\u0430\u0435\u0442 \u0438\u0437 fd 6 (tun\/tap \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e), \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u043a\u0435\u0442 \u043d\u0430 \u0445\u043e\u0441\u0442\u0435, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 icmp \u043f\u0430\u043a\u0435\u0442, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043e\u0442\u0432\u0435\u0442, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e, \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432 fd 6 \u0438 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u043a\u0435\u0442. HTTP \u0437\u0430\u043f\u0440\u043e\u0441 <code>curl example.com --resolve example.com:80:93.184.216.34<\/code> \u0438\u0437 docker_net_ns \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\"># \u0445\u043e\u0441\u0442 user@rootless:~$ strace -p 8097 -e read,socket,sendto,recvfrom,write,close --- # ping 8.8.8.8 strace: Process 8097 attached read(6, \"RU\\n\\0\\2\\0022\\35\\360\\276K\\36\\10\\0E\\0\\0T'W@\\0@\\1\\366\\336\\n\\0\\2d\\10\\10\"..., 65536) = 98 socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_ICMP) = 3 sendto(3, \"\\10\\0&lt;\\201!:\\0An\\357\\355e\\0\\0\\0\\0z\\333\\4\\0\\0\\0\\0\\0\\20\\21\\22\\23\\24\\25\\26\\27\"..., 64, 0, {sa_family=AF_INET, sin_port=htons(8150), sin_addr=inet_addr(\"8.8.8.8\")}, 16) = 64 recvfrom(3, \"\\0\\0e!\\0\\232\\0An\\357\\355e\\0\\0\\0\\0z\\333\\4\\0\\0\\0\\0\\0\\20\\21\\22\\23\\24\\25\\26\\27\"..., 65500, 0, NULL, NULL) = 64 write(6, \"2\\35\\360\\276K\\36RU\\n\\0\\2\\2\\10\\0E\\0\\0T\\0@@\\0\\377\\1^\\365\\10\\10\\10\\10\\n\\0\"..., 98) = 98 close(3)                                = 0     # curl example.com --resolve example.com:80:93.184.216.34 read(6, \"RU\\n\\0\\2\\0022\\35\\360\\276K\\36\\10\\0E\\0\\0&lt;\\361&lt;@\\0@\\6\\7A\\n\\0\\2d]\\270\"..., 65536) = 74 socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC, IPPROTO_IP) = 3 sendto(3, \"\", 0, 0, NULL, 0)            = 0 write(6, \"2\\35\\360\\276K\\36RU\\n\\0\\2\\2\\10\\0E\\10\\0,\\25\\202\\0\\0@\\6#\\4]\\270\\330\\\"\\n\\0\"..., 58) = 58 read(6, \"RU\\n\\0\\2\\0022\\35\\360\\276K\\36\\10\\0E\\0\\0(\\361=@\\0@\\6\\7T\\n\\0\\2d]\\270\"..., 65536) = 54 read(6, \"RU\\n\\0\\2\\0022\\35\\360\\276K\\36\\10\\0E\\0\\0s\\361>@\\0@\\6\\7\\10\\n\\0\\2d]\\270\"..., 65536) = 129 sendto(3, \"GET \/ HTTP\/1.1\\r\\nHost: example.co\"..., 75, 0, NULL, 0) = 75 write(6, \"2\\35\\360\\276K\\36RU\\n\\0\\2\\2\\10\\0E\\10\\0(\\25\\203\\0\\0@\\6#\\7]\\270\\330\\\"\\n\\0\"..., 54) = 54 recvfrom(3, \"HTTP\/1.1 200 OK\\r\\nAccept-Ranges: \"..., 163840, 0, NULL, NULL) = 1607 write(6, \"2\\35\\360\\276K\\36RU\\n\\0\\2\\2\\10\\0E\\10\\6o\\25\\204\\0\\0@\\6\\34\\277]\\270\\330\\\"\\n\\0\"..., 1661) = 1661 read(6, \"RU\\n\\0\\2\\0022\\35\\360\\276K\\36\\10\\0E\\0\\0(\\361?@\\0@\\6\\7R\\n\\0\\2d]\\270\"..., 65536) = 54 read(6, \"RU\\n\\0\\2\\0022\\35\\360\\276K\\36\\10\\0E\\0\\0(\\361@@\\0@\\6\\7Q\\n\\0\\2d]\\270\"..., 65536) = 54 write(6, \"2\\35\\360\\276K\\36RU\\n\\0\\2\\2\\10\\0E\\10\\0(\\25\\205\\0\\0@\\6#\\5]\\270\\330\\\"\\n\\0\"..., 54) = 54 recvfrom(3, \"\", 163840, 0, NULL, NULL)  = 0 write(6, \"2\\35\\360\\276K\\36RU\\n\\0\\2\\2\\10\\0E\\10\\0(\\25\\206\\0\\0@\\6#\\4]\\270\\330\\\"\\n\\0\"..., 54) = 54 read(6, \"RU\\n\\0\\2\\0022\\35\\360\\276K\\36\\10\\0E\\0\\0(\\0\\0@\\0@\\6\\370\\221\\n\\0\\2d]\\270\"..., 65536) = 54 close(3) <\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u044f\u0441\u043d\u043e, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u0432\u043e \u0432\u043d\u0435 \u0438\u0437 docker_net_ns, \u043d\u043e \u043a\u0430\u043a \u0442\u0440\u0430\u0444\u0438\u043a \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u044c \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0430? \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c <code>slirp4netns<\/code>, \u0442\u0440\u0430\u0444\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043e\u0434\u043d\u0430\u043a\u043e \u043a\u0430\u043a \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u0432 docker_net_ns \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f (\u043a\u0430\u043a \u043c\u044b \u0443\u0436\u0435 \u0432\u0438\u0434\u0435\u043b\u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0441\u0442\u0435\u043a \u0445\u043e\u0441\u0442\u0430 \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u0441\u0435\u0442\u0435\u0432\u044b\u043c \u0441\u0442\u0435\u043a\u043e\u043c docker_net_ns)?<\/p>\n<p>  <\/p>\n<h2 id=\"docker_net_ns-dostup-vnutr\">docker_net_ns. \u0414\u043e\u0441\u0442\u0443\u043f \u0432\u043d\u0443\u0442\u0440\u044c<\/h2>\n<p>  <\/p>\n<h3 id=\"docker_net_ns-posle-sozdaniya-konteynera\">docker_net_ns \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430<\/h3>\n<p>  <\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 nginx \u0441 \u043f\u0440\u043e\u0431\u0440\u043e\u0441\u043e\u043c \u043f\u043e\u0440\u0442\u043e\u0432 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c \u0432 docker_net_ns:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\"># \u0445\u043e\u0441\u0442 user@rootless:~$ docker run -d -p 8080:80 --name nginx nginx<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412\u043d\u0443\u0442\u0440\u0438 docker_net_ns \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0441\u044f veth \u0434\u0435\u0432\u0430\u0439\u0441,<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\"># docker_net_ns root@rootless:\/home\/user# ip a  3: docker0: &lt;BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default      link\/ether 02:42:2b:35:4b:6f brd ff:ff:ff:ff:ff:ff     inet 172.17.0.1\/16 brd 172.17.255.255 scope global docker0        valid_lft forever preferred_lft forever     inet6 fe80::42:2bff:fe35:4b6f\/64 scope link         valid_lft forever preferred_lft forever  7: vethf301793@if6: &lt;BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default      link\/ether 1a:27:47:50:5b:e4 brd ff:ff:ff:ff:ff:ff link-netnsid 0     inet6 fe80::1827:47ff:fe50:5be4\/64 scope link         valid_lft forever preferred_lft forever<\/code><\/pre>\n<p>  <\/p>\n<p>\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043a \u0431\u0440\u0438\u0434\u0436\u0443 docker0,<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\"># docker_net_ns root@rootless:\/home\/user# ip -d link show dev vethf301793 7: vethf301793@if6: &lt;BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP mode DEFAULT group default <\/code><\/pre>\n<p>  <\/p>\n<p>\u0432\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 nginx. <\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u044d\u0442\u043e. \u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u043f\u0430\u043a\u0435\u0442\u044b iproute2, iputils-ping \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\"># \u0445\u043e\u0441\u0442 user@rootless:~$ docker exec -it nginx bash # \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 nginx root@dbda1c174f6a:\/# apt update  root@dbda1c174f6a:\/# apt install -y iproute2 iputils-ping<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 eth0@if7 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 7 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 (veth) \u0432 docker_net_ns, \u0430 \u0432 docker_net_ns vethf301793@if6 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 6 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435, \u043f\u0438\u043d\u0433 \u0434\u043e docker0 \u0438\u0437 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\"># \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 nginx root@dbda1c174f6a:\/# ip a       --- 1: lo: &lt;LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000     link\/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00     inet 127.0.0.1\/8 scope host lo        valid_lft forever preferred_lft forever 6: eth0@if7: &lt;BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default      link\/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0     inet 172.17.0.2\/16 brd 172.17.255.255 scope global eth0        valid_lft forever preferred_lft forever  root@dbda1c174f6a:\/# ping 172.17.0.1 -c 2 PING 172.17.0.1 (172.17.0.1) 56(84) bytes of data. 64 bytes from 172.17.0.1: icmp_seq=1 ttl=64 time=0.137 ms 64 bytes from 172.17.0.1: icmp_seq=2 ttl=64 time=0.080 ms<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"tap0-i-lo\">tap0 \u0438 lo<\/h3>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043d\u0438\u0444\u0444\u0438\u043c \u0442\u0440\u0430\u0444\u0438\u043a \u0432 docker_net_ns. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0432 \u043d\u0435\u043c tcpdump \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 tap0 \u0438 \u0441 \u0445\u043e\u0441\u0442\u0430 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043f\u043e\u0440\u0442\u0443 8080, tcpdump \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u2014 \u0442\u0440\u0430\u0444\u0438\u043a \u043d\u0435 \u0438\u0434\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 tap0:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\"># \u0445\u043e\u0441\u0442 user@rootless:~$ curl 192.168.122.49:8080 --- &lt;!DOCTYPE html> &lt;html> &lt;head> &lt;title>Welcome to nginx!&lt;\/title> &lt;style> html { color-scheme: light dark; } body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } &lt;\/style> &lt;\/head><\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\"># docker_net_ns root@rootless:\/home\/user# tcpdump -i tap0 -n -v tcpdump: listening on tap0, link-type EN10MB (Ethernet), capture size 262144 bytes<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u0441\u043d\u0438\u0444\u0444\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 lo (loopback). \u0412\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0430\u043a\u0435\u0442 \u0441 loopback \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0441 \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f 127.0.0.1:8080. \u041d\u043e \u043e\u0442\u043a\u0443\u0434\u0430 \u0436\u0435 \u043e\u043d \u0431\u0435\u0440\u0435\u0442\u0441\u044f, \u0435\u0449\u0435 \u0438 \u0441 loopback \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430?<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\"># docker_net_ns root@rootless:\/home\/user# tcpdump -i lo -n -v tcpdump: listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes --- 20:22:53.337190 IP (tos 0x0, ttl 64, id 55902, offset 0, flags [DF], proto TCP (6), length 60)     127.0.0.1.32920 > 127.0.0.1.8080: Flags [S], cksum 0xfe30 (incorrect -> 0xe397), seq 1059949832, win 65495, options [mss 65495,sackOK,TS val 1345564632 ecr 0,nop,wscale 7], length 0 20:22:53.337221 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)     127.0.0.1.8080 > 127.0.0.1.32920: Flags [S.], cksum 0xfe30 (incorrect -> 0x1691), seq 963548038, ack 1059949833, win 65483, options [mss 65495,sackOK,TS val 1345564633 ecr 1345564632,nop,wscale 7], length 0 20:22:53.337236 IP (tos 0x0, ttl 64, id 55903, offset 0, flags [DF], proto TCP (6), length 52)     127.0.0.1.32920 > 127.0.0.1.8080: Flags [.], cksum 0xfe28 (incorrect -> 0x3d4c), ack 1, win 512, options [nop,nop,TS val 1345564633 ecr 1345564633], length 0 20:22:53.339057 IP (tos 0x0, ttl 64, id 55904, offset 0, flags [DF], proto TCP (6), length 135)     127.0.0.1.32920 > 127.0.0.1.8080: Flags [P.], cksum 0xfe7b (incorrect -> 0x092e), seq 1:84, ack 1, win 512, options [nop,nop,TS val 1345564634 ecr 1345564633], length 83: HTTP, length: 83     GET \/ HTTP\/1.1     Host: 192.168.122.49:8080     User-Agent: curl\/7.68.0     Accept: *\/* ...<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"processy-rootlesskit-i-ego-docherniy-process-v-docker_net_ns\">\u041f\u0440\u043e\u0446\u0435\u0441\u0441\u044b rootlesskit \u0438 \u0435\u0433\u043e \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432 docker_net_ns<\/h3>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u0440\u0442\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044b \u043d\u0430 \u0445\u043e\u0441\u0442\u0435. \u041f\u043e\u0440\u0442 8080 \u043e\u0442\u043a\u0440\u044b\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c <code>rootlesskit<\/code> (pid 8075):<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\"># \u0445\u043e\u0441\u0442 user@rootless:~$ ss -tunlp Netid State  Recv-Q  Send-Q           Local Address:Port    Peer Address:Port Process                                  ...                                          tcp   LISTEN 0       4096                   0.0.0.0:8080         0.0.0.0:*     users:((\"rootlesskit\",pid=8075,fd=14))                                         tcp   LISTEN 0       4096                      [::]:8080            [::]:*     users:((\"rootlesskit\",pid=8075,fd=17)) <\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 8085, \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 \u0432 docker_net_ns. \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043f\u0440\u043e\u0446\u0435\u0441\u0441 <code>rootlesskit<\/code> (\u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 \u0432 \u0445\u043e\u0441\u0442\u043e\u0432\u043e\u043c \u0441\u0435\u0442\u0435\u0432\u043e\u043c \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0435) \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0442\u0440\u0430\u0444\u0438\u043a \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0435\u0433\u043e \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u043c\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 8085 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e unix \u0441\u043e\u043a\u0435\u0442\u0443), \u0430 \u0442\u043e\u0442, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0443 nginx. <\/p>\n<p>  <\/p>\n<p>\u0421 \u0445\u043e\u0441\u0442\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c\u0441\u044f \u043a \u043e\u0431\u043e\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e strace \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u043e\u043d\u0438 \u043e\u0442\u0440\u0435\u0430\u0433\u0438\u0440\u0443\u044e\u0442 \u043d\u0430 <code>curl 192.168.122.49:8080<\/code>. strace \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0441 \u043e\u043f\u0446\u0438\u0435\u0439 <code>-ff<\/code>, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0440\u0435\u0439\u0441 \u0432\u0441\u0435\u0445 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 curl:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">sudo strace -ff -p 8075 -o log1 sudo strace -ff -p 8085 -o log2<\/code><\/pre>\n<p>  <\/p>\n<p>\u041b\u043e\u0433 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0434\u043b\u0438\u043d\u043d\u044b\u0439, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u0430\u043c\u044b\u0435 \u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f. <\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 8075. \u041f\u0440\u0438\u043d\u044f\u0442\u0438\u0435 (accept) \u043d\u043e\u0432\u043e\u0433\u043e tcp \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0438 \u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 (fd 18):<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">accept4(14, {sa_family=AF_INET, sin_port=htons(45752), sin_addr=inet_addr(\"192.168.122.49\")}, [112->16], SOCK_CLOEXEC|SOCK_NONBLOCK) = 18 epoll_ctl(4, EPOLL_CTL_ADD, 18, {EPOLLIN|EPOLLOUT|EPOLLRDHUP|EPOLLET, {u32=3970957316, u64=9194675590499663876}}) = 0 getsockname(18, {sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr(\"192.168.122.49\")}, [112->16]) = 0 setsockopt(18, SOL_TCP, TCP_NODELAY, [1], 4) = 0 setsockopt(18, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0 setsockopt(18, SOL_TCP, TCP_KEEPINTVL, [15], 4) = 0 setsockopt(18, SOL_TCP, TCP_KEEPIDLE, [15], 4) = 0<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 unix \u0441\u043e\u043a\u0435\u0442\u0430 \u043f\u043e \u043f\u0443\u0442\u0438 \/run\/user\/1001\/dockerd-rootless\/.bp.sock:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 19 connect(19, {sa_family=AF_UNIX, sun_path=\"\/run\/user\/1001\/dockerd-rootless\/.bp.sock\"}, 43) = 0 getsockname(19, {sa_family=AF_UNIX}, [112->2]) = 0 getpeername(19, {sa_family=AF_UNIX, sun_path=\"\/run\/user\/1001\/dockerd-rootless\/.bp.sock\"}, [112->43]) = 0<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 unix \u0441\u043e\u043a\u0435\u0442:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">write(19, \">\\0\\0\\0{\\\"Type\\\":\\\"connect\\\",\\\"Proto\\\":\\\"t\"..., 66) = 66<\/code><\/pre>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043b\u043e\u0433 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 8085 (\u0437\u0430\u043f\u0443\u0449\u0435\u043d \u0432 docker_net_ns), \u0442\u043e \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043e\u043d \u0441\u043b\u0443\u0448\u0430\u0435\u0442 unix \u0441\u043e\u043a\u0435\u0442 (accept \u043d\u0430 fd 8) \u043f\u043e \u0442\u043e\u043c\u0443 \u0436\u0435 \u043f\u0443\u0442\u0438 <code>\/run\/user\/1001\/dockerd-rootless\/.bp.sock<\/code> \u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u043e\u0432\u043e\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 fd 3:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">accept4(8, {sa_family=AF_UNIX}, [112->2], SOCK_CLOEXEC|SOCK_NONBLOCK) = 3 getsockname(3, {sa_family=AF_UNIX, sun_path=\"\/run\/user\/1001\/dockerd-rootless\/.bp.sock\"}, [112->43]) = 0<\/code><\/pre>\n<p>  <\/p>\n<p>lsof \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0443 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442 unix \u0441\u043e\u043a\u0435\u0442 \u0441 fd 8:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">user@rootless:~$ lsof -p 8085 --- COMMAND  PID USER   FD      TYPE             DEVICE SIZE\/OFF   NODE NAME ... exe     8085 user    8u     sock                0,9      0t0  74439 protocol: UNIX<\/code><\/pre>\n<p>  <\/p>\n<p>Unix \u0441\u043e\u043a\u0435\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043b\u0443\u0448\u0430\u0442\u044c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <a href=\"https:\/\/github.com\/mechpen\/sockdump\" rel=\"nofollow noopener noreferrer\">sockdump<\/a>, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\"># \u0445\u043e\u0441\u0442 user@rootless:~$ sudo apt-get install bpfcc-tools linux-headers-$(uname -r) user@rootless:~$ git clone https:\/\/github.com\/mechpen\/sockdump.git user@rootless:~$ cd sockdump user@rootless:~$ sudo .\/sockdump.py --format string \/run\/user\/1001\/dockerd-rootless\/.bp.sock --- 21:53:25.778 >>> process rootlesskit [8075 -> 8085] path \/run\/user\/1001\/dockerd-rootless\/.bp.sock len 66(66) >{\"Type\":\"connect\",\"Proto\":\"tcp4\",\"IP\":\"127.0.0.1\",\"Port\":8080}21:53:25.780 >>> process exe [8085 -> 8075] path \/run\/user\/1001\/dockerd-rootless\/.bp.sock len 5(5)<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0435\u0440\u0435\u0437 unix \u0441\u043e\u043a\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f (\u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 127.0.0.1:8080), \u0430 \u0441\u0430\u043c http \u0442\u0440\u0430\u0444\u0438\u043a \u043e\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 nginx \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0433\u0434\u0435 \u043e\u043d. \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u043e\u0433. <\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 8085. \u0427\u0442\u0435\u043d\u0438\u0435 \u0438\u0437 unix \u0441\u043e\u043a\u0435\u0442\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">read(3, \">\\0\\0\\0\", 4)                   = 4 read(3, \"{\\\"Type\\\":\\\"connect\\\",\\\"Proto\\\":\\\"tcp4\\\"\"..., 62) = 62<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 tcp \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0434\u043e 127.0.0.1:8080, \u0440\u0435\u043a\u0432\u0438\u0437\u0438\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u044b\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u044b \u043f\u043e unix \u0441\u043e\u043a\u0435\u0442\u0443:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 9 connect(9, {sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr(\"127.0.0.1\")}, 16) = -1 EINPROGRESS (Operation now in progress) getsockopt(9, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 getpeername(9, {sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr(\"127.0.0.1\")}, [112->16]) = 0 getsockname(9, {sa_family=AF_INET, sin_port=htons(41328), sin_addr=inet_addr(\"127.0.0.1\")}, [112->16]) = 0 setsockopt(9, SOL_TCP, TCP_NODELAY, [1], 4) = 0 setsockopt(9, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0 setsockopt(9, SOL_TCP, TCP_KEEPINTVL, [15], 4) = 0 setsockopt(9, SOL_TCP, TCP_KEEPIDLE, [15], 4) = 0<\/code><\/pre>\n<p>  <\/p>\n<p>\u0414\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e fd tcp \u0441\u043e\u043a\u0435\u0442\u0430 (9->10), \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 fd unix \u0441\u043e\u043a\u0435\u0442\u0430 (3->11) \u0438 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u043a\u0430 \u043f\u043e \u043d\u0435\u043c\u0443 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u0430 tcp \u0441\u043e\u043a\u0435\u0442\u0430 (sendmsg, cmsg_data=[10]):<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">fcntl(9, F_DUPFD_CLOEXEC, 0)            = 10 epoll_ctl(5, EPOLL_CTL_ADD, 10, {EPOLLIN|EPOLLOUT|EPOLLRDHUP|EPOLLET, {u32=3690463235, u64=9186805852923232259}}) = 0 fcntl(10, F_GETFL)                      = 0x802 (flags O_RDWR|O_NONBLOCK) fcntl(10, F_SETFL, O_RDWR)              = 0 fcntl(3, F_DUPFD_CLOEXEC, 0)            = 11 epoll_ctl(5, EPOLL_CTL_ADD, 11, {EPOLLIN|EPOLLOUT|EPOLLRDHUP|EPOLLET, {u32=3674210307, u64=9186805852906979331}}) = 0 fcntl(11, F_GETFL)                      = 0x802 (flags O_RDWR|O_NONBLOCK) fcntl(11, F_SETFL, O_RDWR)              = 0 sendmsg(11, {msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base=\"dummy\", iov_len=5}], msg_iovlen=1, msg_control=[{cmsg_len=20, cmsg_level=SOL_SOCKET, cmsg_type=SCM_RIGHTS, cmsg_data=[10]}], msg_controllen=24, msg_flags=0}, 0) = 5<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 8075. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 fd, \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u043d \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 fd 20 (cmsg_data=[20]):<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">getsockopt(19, SOL_SOCKET, SO_TYPE, [1], [4]) = 0 recvmsg(19, {msg_name={sa_family=AF_UNIX, sun_path=\"\/run\/user\/1001\/dockerd-rootless\/.bp.sock\"}, msg_namelen=112->43, msg_iov=[{iov_base=\"d\", iov_len=1}], msg_iovlen=1, msg_control=[{cmsg_len=20, cmsg_level=SOL_SOCKET, cmsg_type=SCM_RIGHTS, cmsg_data=[20]}], msg_controllen=24, msg_flags=MSG_CMSG_CLOEXEC}, MSG_CMSG_CLOEXEC) = 1<\/code><\/pre>\n<p>  <\/p>\n<p>\u0417\u0430\u043a\u0440\u044b\u0442\u0438\u0435 fd unix \u0441\u043e\u043a\u0435\u0442\u0430 (19), \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e fd (20->19), \u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">close(19)                               = 0 fcntl(20, F_GETFL)                      = 0x2 (flags O_RDWR) fcntl(20, F_DUPFD_CLOEXEC, 0)           = 19 fcntl(19, F_GETFL)                      = 0x2 (flags O_RDWR) fcntl(19, F_SETFL, O_RDWR|O_NONBLOCK)   = 0 getsockopt(19, SOL_SOCKET, SO_TYPE, [1], [4]) = 0 getsockname(19, {sa_family=AF_INET, sin_port=htons(41328), sin_addr=inet_addr(\"127.0.0.1\")}, [112->16]) = 0 getpeername(19, {sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr(\"127.0.0.1\")}, [112->16]) = 0 setsockopt(19, SOL_TCP, TCP_NODELAY, [1], 4) = 0 setsockopt(19, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0 setsockopt(19, SOL_TCP, TCP_KEEPINTVL, [15], 4) = 0 setsockopt(19, SOL_TCP, TCP_KEEPIDLE, [15], 4) = 0<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418 \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u0438\u0448\u0435\u043d\u043a\u0430 \u043d\u0430 \u0442\u043e\u0440\u0442\u0435 \u2014 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e tcp \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0432 \u0434\u0440\u0443\u0433\u043e\u0435 (8075&lt;->8085) \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u044f\u0434\u0440\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">splice(18, NULL, 24, NULL, 1048576, SPLICE_F_NONBLOCK) = 83 splice(23, NULL, 19, NULL, 83, SPLICE_F_NONBLOCK) = 83 splice(19, NULL, 22, NULL, 1048576, SPLICE_F_NONBLOCK) = 853 splice(21, NULL, 18, NULL, 853, SPLICE_F_NONBLOCK) = 853<\/code><\/pre>\n<p>  <\/p>\n<p>\u0423\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u044d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a. \u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c 1048576 \u0431\u0430\u0439\u0442 \u0438\u0437 fd 18 (tcp \u0441\u043e\u043a\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 8075, \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u043d\u0430 \u0445\u043e\u0441\u0442\u0435) \u0432 fd 24 (fifo pipe \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c, \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u0430\u044f \u0441 fd 23 \u2014 \u0432\u0442\u043e\u0440\u043e\u0439 \u043a\u043e\u043d\u0435\u0446 fifo pipe \u0432 \u044d\u0442\u043e\u043c \u0436\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435), \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043e 83 \u0431\u0430\u0439\u0442\u0430 (GET \u0437\u0430\u043f\u0440\u043e\u0441 \u043a nginx). \u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c 83 \u0431\u0430\u0439\u0442\u0430 \u0438\u0437 fd 23 \u0432 fd 19 (tcp \u0441\u043e\u043a\u0435\u0442, \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0432 docker_net_ns \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 8075 \u043d\u0430 \u0445\u043e\u0441\u0442\u0435). \u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c 853 \u0431\u0430\u0439\u0442\u0430 \u043e\u0442\u0432\u0435\u0442\u0430 nginx \u0438\u0437 fd 19 \u0432 fd 18 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0439\u043f 21&lt;->22.<\/p>\n<p>  <\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u0432\u0438\u0434\u043d\u044b \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b fifo pipe \u0438 \u0438\u0445 \u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u044c \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">user@rootless:~$ sudo lsof -p 8075 +E ... rootlessk 8075 user   21r     FIFO               0,13      0t0  82693 pipe 8075,rootlessk,22w rootlessk 8075 user   22w     FIFO               0,13      0t0  82693 pipe 8075,rootlessk,21r rootlessk 8075 user   23r     FIFO               0,13      0t0  82694 pipe 8075,rootlessk,24w rootlessk 8075 user   24w     FIFO               0,13      0t0  82694 pipe 8075,rootlessk,23r<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"process-docker-proxy\">\u041f\u0440\u043e\u0446\u0435\u0441\u0441 docker-proxy<\/h3>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0431\u044b\u043b\u0438 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b, \u0442\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u043b\u0438, \u0447\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 8085 \u0432\u043d\u0443\u0442\u0440\u0438 docker_net_ns \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043a 127.0.0.1:8080, \u043d\u043e \u043a\u0430\u043a \u0436\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 nginx? \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0435\u0441\u0442\u044c \u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0432\u043d\u0443\u0442\u0440\u0438 docker_net_ns, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043b\u0443\u0448\u0430\u044e\u0442 8080. \u041e\u0442\u043c\u0435\u0447\u0430\u0435\u043c, \u0447\u0442\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 docker-proxy:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\"># docker_net_ns root@rootless:\/home\/user# ss -tunlp Netid  State   Recv-Q   Send-Q     Local Address:Port     Peer Address:Port  Process                                   tcp    LISTEN  0        128            127.0.0.1:8080          0.0.0.0:*      users:((\"docker-proxy\",pid=8806,fd=5))   tcp    LISTEN  0        128                [::1]:8080             [::]:*      users:((\"docker-proxy\",pid=8818,fd=5))<\/code><\/pre>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a docker-proxy \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e strace, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043d\u0438\u0444\u0444\u0438\u0442\u044c \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443. docker-proxy \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 127.0.0.1:8080 (fd 3) \u0438 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0443 nginx \u043d\u0430 172.17.0.2:80 (fd 9), \u0430 \u043f\u043e\u0442\u043e\u043c \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u0438\u0437 fd 3 \u0432 fd 9 \u0438 \u043e\u0442\u0432\u0435\u0442 \u0438\u0437 fd 9 \u0432 fd 3 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u044f\u0434\u0440\u0430 (splice):<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">accept4(5, {sa_family=AF_INET, sin_port=htons(38880), sin_addr=inet_addr(\"127.0.0.1\")}, [112->16], SOCK_CLOEXEC|SOCK_NONBLOCK) = 3 getsockname(3, {sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr(\"127.0.0.1\")}, [112->16]) = 0 setsockopt(3, SOL_TCP, TCP_NODELAY, [1], 4) = 0 setsockopt(3, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0 setsockopt(3, SOL_TCP, TCP_KEEPINTVL, [15], 4) = 0 setsockopt(3, SOL_TCP, TCP_KEEPIDLE, [15], 4) = 0 socket(AF_INET, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 9 connect(9, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr(\"172.17.0.2\")}, 16) = -1 EINPROGRESS (Operation now in progress) getsockopt(9, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 getpeername(9, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr(\"172.17.0.2\")}, [112->16]) = 0 getsockname(9, {sa_family=AF_INET, sin_port=htons(37900), sin_addr=inet_addr(\"172.17.0.1\")}, [112->16]) = 0 setsockopt(9, SOL_TCP, TCP_NODELAY, [1], 4) = 0 setsockopt(9, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0 setsockopt(9, SOL_TCP, TCP_KEEPINTVL, [15], 4) = 0 setsockopt(9, SOL_TCP, TCP_KEEPIDLE, [15], 4) = 0 splice(3, NULL, 13, NULL, 1048576, SPLICE_F_NONBLOCK) = 83 splice(12, NULL, 9, NULL, 83, SPLICE_F_NONBLOCK) = 83 splice(9, NULL, 11, NULL, 1048576, SPLICE_F_NONBLOCK) = 853 splice(10, NULL, 3, NULL, 853, SPLICE_F_NONBLOCK) = 853<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u0442\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 \u0442\u0430\u043a\u043e\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0434\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 nginx \u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0431 ip \u0430\u0434\u0440\u0435\u0441\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432.<\/p>\n<p>  <\/p>\n<h3 id=\"itogo\">\u0418\u0442\u043e\u0433\u043e<\/h3>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u0441 \u0445\u043e\u0441\u0442\u0430 \u043a \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0443 nginx \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u043f\u0440\u043e\u0446\u0435\u0441\u0441 <code>rootlesskit<\/code> (pid 8075) \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 tcp \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u0440\u0442\u0443 8080 \u0432 \u0441\u0435\u0442\u0435\u0432\u043e\u043c \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0435 \u0445\u043e\u0441\u0442\u0430<\/li>\n<li>\u043f\u0440\u043e\u0446\u0435\u0441\u0441 <code>rootlesskit<\/code> \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c, \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u043c\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 <code>\/proc\/self\/exe<\/code> (pid 8085), \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u043c\u0443 \u0432 docker_net_ns. \u0423\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 unix \u0441\u043e\u043a\u0435\u0442<\/li>\n<li>\u043f\u0440\u043e\u0446\u0435\u0441\u0441 <code>\/proc\/self\/exe<\/code> \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0434\u043e 127.0.0.1:8080 (\u043f\u043e\u0440\u0442 \u043e\u0442\u043a\u0440\u044b\u0442 \u043d\u043e\u0432\u044b\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c docker-proxy), \u0430 \u0443\u0436\u0435 docker-proxy \u043f\u043e\u0434\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442\u0441\u044f \u043a \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0443 nginx<\/li>\n<li>\u043f\u0440\u043e\u0446\u0435\u0441\u0441 <code>\/proc\/self\/exe<\/code> \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e tcp \u0441\u043e\u043a\u0435\u0442\u0430 \u0434\u043e 127.0.0.1:8080 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 <code>rootlesskit<\/code><\/li>\n<li>\u043f\u0440\u043e\u0446\u0435\u0441\u0441 <code>rootlesskit<\/code> \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u0435\u0436\u0434\u0443 \u0441\u0432\u043e\u0438\u043c \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u043c \u0435\u043c\u0443 \u0441\u0435\u0442\u0435\u0432\u044b\u043c\u0438 \u0441\u043e\u043a\u0435\u0442\u0430\u043c\u0438 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u044f\u0434\u0440\u0430<\/li>\n<\/ul>\n<p>  <\/p>\n<h2 id=\"pochemu-tak-slozhno\">\u041f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a \u0441\u043b\u043e\u0436\u043d\u043e?<\/h2>\n<p>  <\/p>\n<p>\u0412\u0441\u0435 \u0434\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u043e\u043a\u0435\u0440 \u0432 rootless mode \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u043f\u043e\u0434 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0443 \u043d\u0435\u0433\u043e \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0430\u0440\u044b veth \u0434\u0435\u0432\u0430\u0439\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u043a \u0431\u0440\u0438\u0434\u0436\u0443 \u0438 \u0437\u0430\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b (\u043a\u0430\u043a \u0432 \u043e\u0431\u044b\u0447\u043d\u043e\u043c \u0434\u043e\u043a\u0435\u0440\u0435) \u2014 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u044b \u043f\u043e\u043b\u043d\u043e\u043c\u043e\u0447\u0438\u044f \u0440\u0443\u0442\u0430. veth \u0434\u0435\u0432\u0430\u0439\u0441\u044b \u0434\u043e\u043a\u0435\u0440 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0443\u0436\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0430, \u043f\u043e\u0434\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0438\u0445 \u043a \u0431\u0440\u0438\u0434\u0436\u0443 \u0438 \u0437\u0430\u0432\u043e\u0434\u0438\u0442 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440.<\/p>\n<p>  <\/p>\n<h2 id=\"kratkie-vyvody-po-organizacii-setevogo-steka\">\u041a\u0440\u0430\u0442\u043a\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u044b \u043f\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0441\u0442\u0435\u043a\u0430<\/h2>\n<p>  <\/p>\n<p>\u0414\u043e\u0441\u0442\u0443\u043f \u0438\u0437 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441\u0430 \u0434\u043e\u043a\u0435\u0440\u0430 \u043d\u0430\u0440\u0443\u0436\u0443 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0432 userspace, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439. <\/p>\n<p>  <\/p>\n<p>\u0414\u043e\u0441\u0442\u0443\u043f \u0432 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043d\u0435\u0439\u043c\u0441\u043f\u0435\u0439\u0441 \u0434\u043e\u043a\u0435\u0440\u0430 \u0441 \u0445\u043e\u0441\u0442\u0430 \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u0439, \u0442.\u043a. \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u044f\u0434\u0440\u0430, \u0430 \u0432 userspace \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439. \u041a \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0430\u043c \u0442\u0430\u043a\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043d\u0435\u0441\u0442\u0438 \u0442\u043e\u0442 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e \u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043f\u0430\u043a\u0435\u0442\u0430 ip \u0430\u0434\u0440\u0435\u0441 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u0431\u0440\u0438\u0434\u0436\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u0442.\u0435. \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0431 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c ip \u0430\u0434\u0440\u0435\u0441\u0435 \u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f.<\/p>\n<p>  <\/p>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/799625\/\"> https:\/\/habr.com\/ru\/articles\/799625\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/3t\/us\/dp\/3tusdpjtazhqohr5sfv8jetf4u0.png\" data-src=\"https:\/\/habrastorage.org\/webt\/3t\/us\/dp\/3tusdpjtazhqohr5sfv8jetf4u0.png\"\/><br \/>  \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u0434\u043e\u043a\u0435\u0440\u043e\u043c \u0432 rootless mode \u0438 \u043f\u043e \u043f\u0440\u0438\u0432\u044b\u0447\u043a\u0435 \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0435\u0433\u043e \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u043d\u0430 \u0445\u043e\u0441\u0442\u0435. \u041a \u0441\u0432\u043e\u0435\u043c\u0443 \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u044e \u044f \u0438\u0445 \u043d\u0435 \u0443\u0432\u0438\u0434\u0435\u043b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0447\u0430\u043b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a \u0436\u0435 \u0432 \u043d\u0435\u043c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0441\u0435\u0442\u0435\u0432\u043e\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u044f \u0438 \u043f\u043e\u0434\u0435\u043b\u044e\u0441\u044c \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-370558","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/370558","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=370558"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/370558\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=370558"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=370558"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=370558"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}