Я немного растерялся.Пытаясь запустить HTTP-сервер, прослушивающий порт 8080, и SSH-сервер, прослушивающий порт 22 в контейнере Docker, мне удалось выполнить последний, но, как ни странно, не первый.
Вот что я хочу достичь и какЯ попробовал:
Я хочу получить доступ к службам, работающим внутри контейнера Docker , используя IP-адрес, назначенный контейнеру :
ssh user@172.17.0.2
curl http://172.17.0.2:8080
Примечание: Я знаю, что вы не настроили бы настоящий веб-сервер, но я хочу, чтобы контейнер имитировал встроенное устройство, которое запускает обе службы и которое у меня не всегда доступно.(Так что это на самом деле просто локальная непроизводственная штука без каких-либо требований безопасности).
Я не ожидал, что интеграция SSH-сервера будет простой, но к своему удивлению я просто установил и запустил его ибольше ничего не нужно было делать, чтобы иметь возможность подключиться к машине через ssh (без EXPOSE 22
или --publish
).
Теперь я хотел получить доступ к контейнеру по HTTP через порт 8080 и возился с --publish
и EXPOSE
, но удалось сделать HTTP-сервер доступным через localhost/127.0.0.1
на хосте.Так что теперь я могу получить к нему доступ через
curl http://127.0.0.1:8080/
, но я хочу получить доступ к обеим службам через один и тот же IP-адрес, который NOT localhost
(например, адрес, назначенный случайным образом контейнером, являетсясовершенно нормально для меня).
К сожалению
curl http://172.17.0.2:8080/
ждет, пока не истечет время ожидания каждый раз, когда я его связал.
Я пытался docker run
вместе с -p 8080
,-p 127.0.0.1:8080:8080
, -p 172.17.0.2:8080:8080
и многие другие комбинации, вместе или без EXPOSE 8080
в Dockerfile
, но безуспешно.
Почему я могу получить доступ к контейнеру через порт 22, ничего не открывая?
А как мне сделать его доступным через IP-адрес контейнера?
Обновление: похоже, что я испытываю именно то, что описано здесь .