这是我的docker-compose文件,它在同一主机上启动一个NodeJS/PM2
容器和一个React/Nginx
容器。
version: '3'
services:
nodejs:
image: nodejs_pm2:1.00
container_name: NODE_CONTAINER
ports:
- "8000:8000"
build:
context: ./nodejs
dockerfile: Dockerfile-nodejs
react:
image: react_nginx:1.00
container_name: REACT_CONTAINER
ports:
- "3000:3000"
build:
context: ./react-app
dockerfile: Dockerfile-react
depends_on:
- nodejs
如您所见,我的react
服务depends_on nodejs
。这应该链接容器,对吗?
问题1)假设是真的,向我的节点后端发出HTTP请求的正确方法是什么?
这是我尝试对Nginx配置文件执行的操作:
upstream backend {
server nodejs:8000
}
server {
listen 3000;
location ~ ^/api/[0-9a-z]+/$ {
proxy_pass http://backend/;
include /etc/nginx/proxy_params;
}
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
}
这不起作用。实际上,这完全阻止了前端的出现。我要从我的react应用中尝试做这样的事情axios.get("http://backend/api/*")
。我查看了几个stackoverflow帖子,但似乎没有一个对我有用。
问题2),后续问题是,如果出现以下情况,链接容器有什么意义?
两个容器位于同一主机上,我不能像平常一样向localhost:port
发出请求吗?
答案 0 :(得分:0)
您实际上有3个问题:
问题0 这应该链接容器,对吗?
不是,depends_on
定义了容器依赖性(例如,在容器B之前等待容器A启动),而不是链接
问题1 ?向我的节点后端发出HTTP请求的正确方法是什么?
您的2个容器可以使用container_name
属性相互连接
因此,对于您的nginx.config,您应该能够通过NODE_CONTAINER:8000
问题2 * ,如果两个容器位于同一主机上,那么链接容器的意义何在?我不能像往常一样向localhost:port发出请求吗?
请参考此内容,它将比我更好地解释容器网络和链接概念https://docs.docker.com/compose/networking/