无法访问本地主机上的 Docker 容器 [重复]

Posted

技术标签:

【中文标题】无法访问本地主机上的 Docker 容器 [重复]【英文标题】:Can’t acces Docker container on localhost [duplicate] 【发布时间】:2022-01-07 21:04:42 【问题描述】:

我有一个使用 Angular-cli 的前端应用程序,我正在尝试在将其集成到容器核心之前检查它是否单独工作,但似乎我无法访问本地主机。 我正在使用带有 Docker Desktop 的 macOS Catalina 10.15.7。

这与其他问题不同,因为我在 *** 中提出问题之前已经测试过,所以不要重复,谢谢!!

我的 Dockerfile 是这样构建的:

FROM    node:14-alpine3.12

WORKDIR /app/front

#COPY    ./angular-cli .
COPY    package.json package-lock.json
COPY    . .       

RUN     npm install 
RUN     npm install -g @angular/cli

EXPOSE  4200
# Angular installation if it fails, 

CMD     ["ng", "serve"]

当我使用命令运行应用程序时:

docker run -d -p 80:4200 reponame

我的构建完美运行并向我展示了这一点:

** Angular Live Development Server is listening on localhost:4200, open your browser on http://localhost:4200/ **
Compiled successfully.

当我转到 Localhost:4200 时,它显示该页面不可访问。 我也尝试使用此命令与 IP 地址连接,但同样的事情。

docker inspect -f ‘range .NetworkSettings.Networks.IPAddressend’ imagename

我还尝试更改不同的端口,因为我在 Mac 中读取了端口 80 可能已损坏或某种原因,所以我尝试了:

docker run -d -p 4200:4200 appname
docker run -d -p 8080:4200 appname

如果有人可以帮助我,那真的很棒。 谢谢!

【问题讨论】:

你认为-p 80:4200 会做什么? 将任何流量从应用程序端口发送到 docker 端口? 但是哪些端口?阅读docs.docker.com/engine/reference/commandline/run/… 我的应用程序端口在 4200 到 80,我尝试进入 localhost:80 一样的东西 您需要一个ng serve --host 0.0.0.0 选项。如果服务器在其启动消息中打印出“正在侦听 localhost:12345”,则无法从其自己的容器外部访问它。 【参考方案1】:

您的端口映射似乎与您要实现的目标不正确。 -p 80:4200 表示您将使用主机上的端口 80 来访问应用程序。

所以你应该尝试通过 http://localhosthttp://localhost:80 来访问它。即使这不起作用,有时您的端口 80 已经绑定到其他应用程序。也许您可以尝试使用其他端口,例如 8080、8888 等,而不是 80。

【讨论】:

正如我提到的,正如你在 http//localhost 中所说的,但如果端口已经被占用,Docker 会告诉我它是,不是吗?【参考方案2】:

我假设您在容器中的应用不会通过0.0.0.0 接口公开。

因此,在您的 Angular 应用程序中,将 localhost 上的暴露改为 0.0.0.0

更新你的 CMD:

CMD ["ng", "serve", "--host", "0.0.0.0"]

使用 localhost:80 从您的主机系统连接。

【讨论】:

好主意去试试,没想到。 酷,让我知道它是否有效。 嗯似乎不起作用... 你在你的 Dockerfile 中更改了ng serve --host 0.0.0.0,就像@DavidMaze 提议的那样? 是的,只是在等待构建并告诉你发生了什么,但会问你同样的问题,如果已经在我的 package.json 中指定了它,我应该在我的 Dockerfile 中再做一次吗?

以上是关于无法访问本地主机上的 Docker 容器 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使 Docker 容器与本地主机上的 geth 对话

在本地主机上运行 docker 容器不起作用

如何从 docker 容器访问 localhost? [复制]

为啥我无法从本地主机上的 Gitlab CI 连接到我的 docker-compose 服务

在本地主机上使用具有多个项目的相同容器

无法从 docker 容器连接到数据库 [重复]