Владелец процесса докер-программы
Я начал 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
чтобы выяснить, что это за процесс.