Как читать аргументы запуска Docker (в частности, -p) внутри контейнера Docker - PullRequest
2 голосов
/ 11 октября 2019

У меня есть требование, в котором я должен прочитать аргументы запуска docker в моей команде ввода.

run docker -d -p 4058: 4058 -p 5800-5805: 5800-5805 image_name

Dockerfile:

FROM alpine

# some logic in here

CMD ["/bin/sh", "-c", "sh start.sh"]

В моем файле start.sh я хочу прочитать значение -p (4058: 4058 5800-5805: 5800-5805) запуска Docker.

Apartот использования переменная окружения при запуске Docker, есть ли способ прочитать аргумент -p в файле start.sh.

Ответы [ 2 ]

1 голос
/ 11 октября 2019

Единственный способ на данный момент - это смонтировать /var/run/docker.sock в вашем докере, также известном как dind .

, возможно, это когда-нибудь будет реализовано, но проблема с 2014 года :). здесь

0 голосов
/ 11 октября 2019

Невозможно получить порт 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"
]

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