无法从docker容器访问angular2应用程序

时间:2016-09-17 19:57:36

标签: angular docker docker-machine angular-cli

我使用官方节点图像创建了一个docker容器。

docker pull node

然后我使用angular-cli创建了一个有角度的2应用程序。

ng new docker-demo

然后我使用以下命令从angular2应用程序的目录中运行我的docker容器:

cd docker-demo

&安培;然后在目录中:

docker run -p 8080:4200 -v $(pwd):/var/www -w "/var/www" node npm start

其中pwd代表我的angular2应用程序的目录。

现在在我的控制台中,我可以看到我的angular2应用程序被捆绑了&就像它在我的本地机器上运行一样运行。

但是当我尝试使用我的docker-machine的ip从我的浏览器访问它时:

http://192.168.99.100:8080/

它不起作用。

PS:angular2 app在我的本地系统中运行得非常好。

是否需要额外的配置?

任何输入?

提前感谢。

3 个答案:

答案 0 :(得分:4)

我有类似的问题。能够使用ng serve --host 0.0.0.0作为我的容器的起始命令来修复它。重要的是要记住在构建时暴露正确的端口。确保使用EXPOSE 4200或您希望在Dockerfile中公开应用程序的任何其他端口。 4200是Angular2 / 4应用程序的默认设置,因此大部分时间都是最佳选择。

如果你正在使用Docker compose,那就是同样的事情。请记住公开端口并使用ng serve命令中的相应参数。希望它可以帮助你和任何其他队长在同样的问题上挣扎。

答案 1 :(得分:0)

你的docker命令应该是这样的:

docker run --rm --name my-container -it -p 8080:4200 -v $(pwd):/var/www -w "/var/www" node npm start
  • - rm - >停止时会删除你的容器
  • -it - >将记录日志输出
  • - 名称 - >给出容器的名称

如果您想要关注日志,则需要 -it ;如果您不想记录日志输出,则需要 -d

我建议使用 - 命名您的容器名称,以便轻松删除/停止/启动您的容器。

检查容器的状态:

docker ps -a

其中-a将显示所有容器,包含stoped容器。

在此处查看更多内容:Docker Documentation

答案 2 :(得分:0)

您需要根据image installation guide

公开端口

在Node.js应用项目中创建一个Dockerfile

 In[1]: sum([[1], [2], [3]], [4])
Out[1]: [4, 1, 2, 3]               # not [1, 2, 3, 4]

然后,您可以构建并运行Docker镜像:

FROM node:4-onbuild
# replace this with your application's default port
EXPOSE 8888

所以在你的情况下:

$ docker build -t my-nodejs-app .
$ docker run -it --rm --name my-running-app my-nodejs-app

您的应用应该可以在> ng new docker-demo > cd docker-demo > echo "FROM node:6.6.0-wheezy EXPOSE 4200" > Dockerfile > docker build -t my-nodejs-app . > docker run --rm --name docker-demo -p 8080:4200 -v $(pwd):/var/www -w "/var/www" my-nodejs-app npm start 上访问(用相关的docker ip替换127.0.0.1)。