为什么无法从外部连接到我的容器

时间:2020-03-30 14:52:09

标签: docker curl

我正在尝试在计算机上执行小型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版本是2008年3月19日,操作系统是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

正确的本地地址应为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 个答案:

答案 0 :(得分:1)

确保容器内的应用正在侦听外部ip,而不仅是本地主机(127.0.0.1)。通常是通过监听*:8080或0.0.0.0:8080来完成的。

答案 1 :(得分:0)

从容器外部运行它:

settings.grid[x][y] = number
solve()
settings.grid[x][y] = 0 # <==== Right here