Владелец процесса докерной программы - PullRequest
0 голосов
/ 01 сентября 2018

Я запустил контейнер nginx, привязанный к сети host, следующим образом:

docker run --rm -d --network host --name mynginx nginx

Однако при запросе информации о процессе с помощью команды ss это выглядит как чистый nginx, но не a docker процесс:

$ ss -tuap 'sport = :80'
Netid               State                  Recv-Q                 Send-Q                                  Local Address:Port                                 Peer Address:Port                
tcp                 LISTEN                 0                      128                                           0.0.0.0:http                                      0.0.0.0:*                    users:(("nginx",pid=16563,fd=6),("nginx",pid=16524,fd=6))

почему это?

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

Вы настроили процесс nginx для запуска в пространстве имен сети хоста --net host. В этом режиме вы не настраиваете переадресацию портов с хоста в контейнерную сеть (например, -p 80:80). Если бы вы сделали переадресацию портов, вы бы увидели процесс докера на хосте, который перенаправляет на тот же порт в пространстве имен контейнера для процесса nginx.

Имейте в виду, что контейнеры - это метод для запуска приложения с параметрами ядра для таких вещей, как пространство имен, это не виртуальная машина, работающая под отдельной ОС, поэтому вы увидите запущенные процессы и порты, открытые непосредственно на хосте.

Вот пример того, как это выглядело бы, если бы вы перенаправили порт вместо использования пространства имен сети хоста, и как вы также можете посмотреть на пространство имен сети внутри контейнера:

$ docker run --rm -d -p 8000:80 --name mynginx nginx                                                                                
d177bc43166ad59f5cdf578eca819737635c43b2204b2f75f2ba54dd5a9cffbb

$ sudo ss -tuap 'sport = :8000'              
Netid State      Recv-Q Send-Q Local Address:Port                 Peer Address:Port 
tcp   LISTEN     0      128        :::8000                     :::* users:(("docker-proxy",pid=25229,fd=4))

$ docker run -it --rm --net container:mynginx --pid container:mynginx nicolaka/netshoot ss -tuap 'sport = :80'                      
Netid  State      Recv-Q Send-Q Local Address:Port                 Peer Address:Port 
tcp    LISTEN     0      128     *:http                  *:*                     users:(("nginx",pid=1,fd=6))

У процесса docker-proxy есть способ по умолчанию, который Docker перенаправляет порт в контейнер.

0 голосов
/ 02 сентября 2018

Боюсь, здесь есть какое-то недопонимание относительно так называемого docker process.

Прежде всего, команда ss не показывает, что это за процесс. Может отображать название приложения (nginx здесь). Но мы не могли бы сказать, что это так называемый pure nginx process.

Вы можете попробовать pwdx nginx_pid. В противном случае каждый работающий контейнер - это процесс, который мы можем проверить с помощью ps -ef на его хост-машине.

Прежде всего, вы можете использовать ps -ef|grep nginx и pwdx nginx_pid, чтобы узнать, что это за процесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...