我正在构建一个在端口3000上运行的Express(nodejs)应用程序,它带有一个简单的hello世界,并且已经热到了一个公共的github存储库。
实际上,它运行良好,代码看起来像这样:
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('Hello World!');
});
var server = app.listen(3000, function () {
var host = server.address().address;
var port = server.address().port;
console.log('Example app listening at http://%s:%s', host, port);
});
我正在研究docker,我想让这个小代码在容器内部工作,所以我创建了这个dockerfile:
FROM phusion/baseimage:0.9.17
# Use baseimage-docker's init system.
CMD ["/sbin/my_init"]
# Install corresponding packages
# Git, pm2, curl
RUN apt-get update && apt-get install -y \
git \
curl
# Downloading NodeJs v0.12
RUN curl -sL https://deb.nodesource.com/setup_0.12 | sudo bash -
RUN apt-get install -y nodejs
# Cloning repository
RUN git clone https://github.com/User/hello-world.git
# Install global dependencies
RUN npm install -g pm2
# Move inside of the project
RUN cd hello-world && npm install && pm2 start app.js
# Clean up APT when done.
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
然后我运行这些命令:
docker build -t hello-world
docker run -p 3000:3000
此后(全部成功),当我尝试访问http://localhost:3000/时,找不到该页面。
我需要一些帮助来理解我的错误。
全部谢谢
答案 0 :(得分:1)
您应该登录正在运行的容器:
docker exec -it <container-id> /bin/bash
进入容器后,您可以在那里运行您的应用程序并直接在容器内调试。
类似的东西:
cd your-directory/hello-world
然后:
node app.js
控制台会像本地开发环境一样吐出错误。
答案 1 :(得分:0)
根据您的docker安装,它可能在localhost上不可用。 例如,我的安装在127.0.0.1上不可用,但在192.168.99.100上。
以下hostsentry:
192.168.99.100 dockerhost
上访问您的应用希望有所帮助: - )