我有一个简单的Node.js / Express应用程序:
const port = 3000
app.get('/', (req, res) => res.send('Hello World!'))
app.listen(port, () => console.log(`Example app listening on port ${port}!`))
当我像这样启动它时,它可以正常工作:node src / app.js
现在,我正在尝试在Docker容器中运行它。 Dockerfile是:
FROM node:8
WORKDIR /app
ADD src/. /app/src
ADD package.json package-lock.json /app/
RUN npm install
COPY . /app
EXPOSE 3000
CMD [ "node", "src/app.js" ]
开始正常:docker run <my image>:
Listening on port 3000
但是现在我无法在浏览器中访问它: http://localhost:3000
This site can’t be reached localhost refused to connect.
如果我尝试在docker-compose中运行它,也会发生同样的情况:
version: '3.4'
services:
service1:
image: xxxxxx
ports:
- 8080:8080
volumes:
- xxxxxxxx
myapp:
build:
context: .
dockerfile: Dockerfile
networks:
- private
ports:
- 3000
command:
node src/app.js
不确定我是否正确处理两个docker文件中的端口
答案 0 :(得分:0)
您需要发布端口
docker run -p 3000:3000 <my image>
-p
-代表发布
答案 1 :(得分:0)
尝试一下:
services:
myapp:
build:
context: .
dockerfile: Dockerfile
networks:
- private
ports:
- 3000:3000 ##THIS IS THE CHANGE, YOU NEED TO MAP MACHINE PORT TO CONTAINER
command:
node src/app.js
答案 2 :(得分:0)
使用docker时,必须将应用程序的主机定义为0.0.0.0
,而不是localhost
。
对于您的快速应用程序,您可以在app.listen
调用中定义主机。
检查documentation: app.listen([端口[,主机[,待办事项]]] [,回调])
您的快递代码应更新为:
const port = 3000
const host = '0.0.0.0'
app.get('/', (req, res) => res.send('Hello World!'))
app.listen(port, host, () => console.log(`Example app listening on ${port}!`))
发布docker端口也很重要:
docker run -p 3000:3000 <my image>
services:
myapp:
build:
context: .
dockerfile: Dockerfile
networks:
- private
ports:
- 3000:3000
command:
node src/app.js