无法从Windows主机访问linux contianer中的angular webserver

时间:2018-09-10 09:07:31

标签: docker

我正在在Windows 10上托管的ubuntu容器内部署一个角度应用程序。这是我的dockerfile:

FROM ubuntu:latest
COPY app /app
RUN apt-get update
RUN apt-get install -y curl software-properties-common python-pip
RUN curl -sL https://deb.nodesource.com/setup_8.x | bash -
RUN apt-get install -y nodejs
RUN npm install -g @angular/cli
RUN pip install -r /app/requirements.txt
WORKDIR /app/ng
RUN npm install
RUN npm rebuild node-sass
EXPOSE 4200
WORKDIR /
RUN touch start.sh
RUN echo "python /app/server.py &" >> start.sh
RUN echo "cd /app/ng" >> start.sh
RUN echo "ng serve" >> start.sh
RUN chmod +x start.sh
ENTRYPOINT ["/bin/bash"]
CMD ["start.sh"]

我使用

运行图像
docker run -p 4200:4200 --name=test app

现在,问题是,我正在Windows 10上运行此容器,从Docker的网络角度来看,我对它并不十分熟悉。如果我要运行Linux,则可以通过访问http://localhost:4200通过任何浏览器轻松访问该应用程序,但是Windows 10似乎不是这样。当我尝试通过Chrome访问我的应用程序时,我得到

This site can’t be reached
localhost refused to connect.
ERR_CONNECTION_REFUSED

我尝试搜索并在docker论坛上找到similar issue。采纳建议后,我尝试通过我的IPv4地址访问容器,但失败了。我也尝试使用docker NAT IP 10.0.75.1,但没有结果。我通过docker inspect test掌握了容器IP,并使用了容器IP 172.17.0.2,但是那也不起作用。

主机卷曲的输出:

E:\app>curl localhost:4200
curl: (7) Failed to connect to localhost port 4200: Connection refused

E:\app>curl 0.0.0.0:4200
curl: (7) Failed to connect to 0.0.0.0 port 4200: Address not available

如果我在容器内卷曲,它会按预期工作

root@97cd2c1e6784:/# curl localhost:4200
<!doctype html>
<html lang="en">
<body>
        <p>Test app</p>
</body>
</html>

如何从Windows主机浏览器访问我的角度应用程序?如果您想了解更多信息,请在评论中提出要求。

2 个答案:

答案 0 :(得分:1)

搜索更多后,我得到了答案here。我只需要使用ng serve --host 0.0.0.0而不是ng serve来启动角度服务器,这样应用程序就可以在所有网络接口上运行,而不仅仅是在循环接口上运行。

答案 1 :(得分:0)

已解决:我只需要重新启动机器:) 我有一个类似的问题(但我没有使用 Docker)。当我运行命令“ng serve --host 0.0.0.0”时,我可以将它卷曲在 ubuntu WSL2 实例(附上截图)中,它工作正常!!,但是我无法使用浏览器(在 Windows 10 build 19043 上)它总是返回“ERR_CONNECTION_REFUSED”。有什么想法吗?

enter image description here

enter image description here