大家晚上好:
我正在学习如何使用nginx和nodejs构建docker容器。
我现在被卡住了,我到了一个点,一切都在工作,但index.html页面没有显示nodeJS容器推送的内容。
version: '3.8'
services:
nginx:
image: arm64v8/nginx
container_name: nginx
restart: unless-stopped
ports:
- "80:80"
- "433:433"
volumes:
- /home/user/setup-ssl-nginx-docker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- node_app
node_app:
build:
context: .
dockerfile: Dockerfile
container_name: node_app
restart: unless-stopped
ports:
- "5001:5001"
volumes:
- .:/node-1
字符串
docker-compose.yml
server{
listen 80;
server_name domain.com;
location / {
autoindex on;
proxy_pass http://node_app:5001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
型
nginx.conf
FROM node
WORKDIR /app
COPY package.json ./
RUN npm install express
COPY . .
EXPOSE 5001
CMD ["node", "app.js"]
型
停靠文件
const express = require("express")
const app = express();
const path = require(`path`);
app.get('/', (req, res) => {
res.sendFile(__dirname + "/index.html");
})
app.get('app', (req, res) => {
return res.status(200).send({ "message": "App Response from Server-1"});
});
const port = 5001
app.listen(port, () => console.log(`server is Up & running on port ${port}`))
型
app.js文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p>Welkom</p>
</body>
</html>
型
index.html
我得到一个布兰科index.html,如果我运行docker log,它显示两个容器都运行良好的NodeJS和nginx。
如果我做一个wget domain.com我也得到空白的html回来。
1条答案
按热度按时间daupos2t1#
我不完全确定,但也许给予试试。
您可以将
docker-compose.yml
调整为:字符串
我的想法是,使用
ports: -5001:5001
,您只需将此端口暴露给主机。因此,您可以在机器的端口5001上访问它。我不知道你是否真的可以通过这种方式从另一个Docker容器访问这个端口。因此,我们不使用
ports
,而是使用expose
,将给定端口暴露给容器所连接的所有内部Docker网络。因此,我们将容器与nginx容器一起放置在net_nginx
网络中,因此nginx能够找到容器并通过给定端口访问它。