Невозможно получить порт Bind внутри самого контейнера, если вы не смонтируете /var/run/docker.sock
. но вы не должны игнорировать высоту риска, делая это лучше для ENV.
Владелец докера /var/run/docker.sock
является корнем хоста, на котором работает контейнер, с группой по умолчаниючленство в докерной группе. Вот почему монтирование var/run/docker.sock
внутри другого контейнера дает вам привилегии root, поскольку теперь вы можете делать все, что может пользователь root с групповым членством в docker.
Поэтому я предлагаю пройти через docker-security-best-Practices
Но, тем не менее, если вы хотите пойти и вы должны знать о риске, вы можете сделать это, чтобы получить порт привязки.
docker run --rm -it --name test -p 3000:3000 -v /var/run/docker.sock:/var/run/docker.sock alpine:latest sh -c "apk add --no-cache curl jq && sh"
затемзапустить
docker exec -it test ash
curl -s --unix-socket /var/run/docker.sock http:/v1.26/containers/$(hostname)/json | jq \'.NetworkSettings | .Ports | keys\'
#output:
[
"3000/tcp"
]