Владелец процесса докер-программы

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

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

Тем не менее, при запросе информации о процессе с ss команда, это кажется чистым nginx но не 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 ответа

Вы настроили процесс 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 перенаправляет порт в контейнер.

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

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

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

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

Другие вопросы по тегам