我使用官方节点图像创建了一个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在我的本地系统中运行得非常好。
是否需要额外的配置?
任何输入?
提前感谢。
答案 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
如果您想要关注日志,则需要 -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)。