Почему невозможно подключиться к моему контейнеру снаружи? - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь запустить небольшой Scala сервер на моем компьютере, код работает хорошо, поэтому проблема, на мой взгляд, заключается в docker стороне.

Здесь вы можете увидеть мой Dockerfile:

FROM java:8-jdk-alpine

RUN apk add --update \
    curl \
    && rm -rf /var/cache/apk/*

COPY ./target/scala-2.13/hello-world-assembly-1.0.jar /usr/app/

EXPOSE 8080

WORKDIR /usr/app

CMD ["java", "-jar", "hello-world-assembly-1.0.jar"]

Команда построения: docker build -t carloshn90/first-scala-server:latest .

Выполнение команды: docker run -p 8080:8080 --name scala-server -it carloshn90/first-scala-server:latest

Проблема заключается в том, что при попытке выполнить завиток внутри контейнера работает хорошо : docker exec scala-server curl localhost:8080 но не снаружи.

Docker состояние контейнера:

docker ps status

Завиток внутри контейнера:

curl inside container

Наконец, здесь та же завивка, но снаружи контейнера:

curl outside container

Моя docker версия - 19.03.08, а операционная система - macOS Catalina.

Буду признателен, если у кого-то есть идеи о том, как решить эту проблему

------- - Решение --------

Может быть, эта информация полезна для других, в моем случае проблема заключалась в том, что вместо локального адреса был localhost 0.0.0.0:

/usr/app # netstat -a
Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 localhost:http-alt      0.0.0.0:*               LISTEN

Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ]         STREAM     CONNECTED     172119

W тогда правильный локальный адрес должен быть 0.0.0.0

/usr/app # netstat -a
Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:http-alt        0.0.0.0:*               LISTEN

Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ]         STREAM     CONNECTED     215241

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Убедитесь, что ваше приложение внутри контейнера прослушивает внешний ip, а не только localhost (127.0.0.1). Обычно это делается при прослушивании *: 8080 или 0.0.0.0:8080.

.
0 голосов
/ 30 марта 2020

Запустите это снаружи контейнера:

curl -L http://localhost:8080
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...