带有 Angular2 应用程序和 NodeJs 的 Docker 容器没有响应

Posted

技术标签:

【中文标题】带有 Angular2 应用程序和 NodeJs 的 Docker 容器没有响应【英文标题】:Docker container with Angular2 app and NodeJs does not respond 【发布时间】:2017-05-19 23:57:09 【问题描述】:

我通过 angular-cli 创建了新的 Angular2 应用程序并在 Docker 中运行它。但我无法从本地主机连接它。

首先我在本地机器上初始化应用程序:

ng new project && cd project &&  "put my Dockerfile there" && docker build -t my-ui .

我通过命令启动它:

docker run -p 4200:4200 my-ui

然后在我的本地主机上尝试:

curl localhost:4200

并接收

curl: (56) Recv failure: Connection reset by peer

然后,我尝试切换到正在运行的容器(docker exec -ti container-id bash)并运行 curl localhost:4200 并且它可以工作。

我还尝试使用 --net= 主机参数运行容器:

docker run --net=host -p 4200:4200 my-ui

而且它有效。问题是什么?我还尝试在守护进程模式下运行容器,但没有帮助。谢谢。

我的 Dockerfile

FROM node

RUN npm install -g angular-cli@v1.0.0-beta.24 && npm cache clean && rm -rf ~/.npm

RUN mkdir -p /opt/client-ui/src
WORKDIR /opt/client-ui  

COPY package.json /opt/client-ui/
COPY angular-cli.json /opt/client-ui/
COPY tslint.json /opt/client-ui/

ADD src/ /opt/client-ui/src

RUN npm install
RUN ng build --prod --aot

EXPOSE 4200

ENV PATH="$PATH:/usr/local/bin/"    
CMD ["npm", "start"]

【问题讨论】:

什么操作系统和 docker 版本? 【参考方案1】:

您似乎使用ng serve 来运行开发服务器,并且默认情况下它在循环接口上启动(仅在本地主机上可用)。您应该提供具体参数:

ng serve --host 0.0.0.0

在所有接口上运行它。

【讨论】:

【参考方案2】:

您需要更改 angular-cli 以在外部为应用程序提供服务,即将您的 npm 脚本更新为 ng serve --host 0.0.0.0

【讨论】:

以上是关于带有 Angular2 应用程序和 NodeJs 的 Docker 容器没有响应的主要内容,如果未能解决你的问题,请参考以下文章

Angular2 http post请求到另一个端口上的nodejs服务器

使用 NodeJS 将 Angular2 项目连接到 SpringBoot (Java) 的最佳实践

在 typescript / angular2 环境和后端的 nodejs 中设置持久会话时遇到问题

在 Angular 2 应用程序中导入节点 js 模块

带有 Angular2 和 VS 2015 的 Webpack

angular2 必须使用 nodejs,我可以使用 apache 服务器运行吗?