Докерный порт, не показывающий Голанга

mornindew спросил: 13 июня 2018 в 10:05 в: docker

Я создаю golang WebService в докере. Конструкция кажется прекрасной, но я не могу открыть порт для внешнего (вне контейнера) доступа. Когда я зависаю из командной строки (внутри контейнера), приложение работает нормально.

Я видел довольно много сообщений о похожих проблемах, но, к сожалению, многие из них не были разрешены или не казались применимыми.

FROM golang:alpine
RUN mkdir /go/src/webservice_refArch
ADD . /go/src/webservice_refArch
WORKDIR /go/src/webservice_refArch
RUN apk add curl
RUN cd /go/src/webservice_refArch/ && go get ./...
RUN cd /go/src/webservice_refArch/cmd/reference-w-s-server && go build -o ../../server
EXPOSE 7878
ENTRYPOINT ["./server", "--port=7878"]

Я пробовал оба:

  • : 7878
  • localhost: 7878

2 ответа

atline ответил: 13 июня 2018 в 10:34

См. https://docs.docker.com/engine/reference/run/#expose-incoming-ports, просто открыть порт в файле docker недостаточно.

Вы можете добавить -p 7878:7878 при запуске контейнера или используйте -P, чтобы docker установил для вас сопоставление автоматического хост-порта.

Если вы не хотите делать выше, вы также можете добавить --net=host при запуске контейнера, тогда контейнер будет использовать сеть хоста, если он также работает для вас.

mornindew ответил: 13 июня 2018 в 11:30
Большое спасибо. Интересно, что "--net = host" работал, но оба "-P" или "-p 7878: 7878" не работали. Когда я делаю "--net = host", я могу нажать "localhost: 7878 / users / 123", и он работает. Когда я делаю "-p 7878: 7878", тогда это не сработает. Я попробовал < dockerIP >: 7878 / users / 123"и получил сообщение о неудачной ошибке подключения. Что-то явно связано с моей сетью.
atline ответил: 13 июня 2018 в 12:12
Какая у вас докерная версия? Докер на windows или докер на linux? Могла ли она работать, если перезапустить демон докеров? Или вы можете использовать http://real_host_ip:7878/users/123 для доступа к localhost?
Johnny ответил: 13 июня 2018 в 10:37

, если вы пытаетесь получить доступ к порту внутри контейнера докеров с вашего локального компьютера, вам нужно сопоставить его с нужным портом на вашем локальном компьютере docker run -p 7878:7878 IMAGE. Затем вы должны иметь доступ к нему на своем хосте

Дополнительное видео по вопросу: Докерный порт, не показывающий Голанга

Practical Design Patterns in Docker Networking

Docker Networking

Docker Training 20/29: Docker Container IP Address and Port Number