Node.js 节点和反应器的停靠设置
我想运行两个docker容器:一个是NodeServerBackend,另一个是react js codefrontend 我的节点包含一个API,如下所示:Node.js 节点和反应器的停靠设置,node.js,reactjs,docker,docker-compose,Node.js,Reactjs,Docker,Docker Compose,我想运行两个docker容器:一个是NodeServerBackend,另一个是react js codefrontend 我的节点包含一个API,如下所示: app.get('/build', function (req, res) { ... ... }); app.listen(3001); console.log("Listening to PORT 3001"); 我在react代码中使用此API,如下所示: componentDidMount() { axios
app.get('/build', function (req, res) {
...
...
});
app.listen(3001);
console.log("Listening to PORT 3001");
我在react代码中使用此API,如下所示:
componentDidMount() {
axios.get('http://localhost:3001/build', { headers: {"x-access-token": this.state.token}
})
.then(response => {
const builds = response.data.message;
//console.log("builds",builds);
this.setState({ builds: builds,done: true });
});
}
但是,当我运行两个不同的Docker容器时,后端容器暴露3001,前端容器暴露3000,访问aws ip是我运行两个Docker容器的aws实例的公共ip,发出的请求是
http://localhost:3001/build 因此,我无法访问docker容器的节点api
我应该在现有设置中进行哪些更改,以便我的react应用程序可以从运行在同一AWS实例上的节点服务器获取数据 你可以按照他的教程去做。 我认为您可以通过docker compose实现这一点: 例如: 下面是我如何使用
version: '3'
services:
awsService:
build:
context: ./awsService
dockerfile: Dockerfile.dev
volumes:
- ./awsService/src:/app/src
ports:
- "3000:3000"
keymaster:
build:
context: ./keymaster
dockerfile: Dockerfile.dev
volumes:
- /app/node_modules
- ./keymaster:/app
ports:
- "8080:8080"
postgres:
image: postgres:12.1
ports:
- "5432:5432"
environment:
POSTGRES_PASSWORD: mypassword
volumes:
- ./postgresql/data:/var/lib/postgresql/data
service:
build:
context: ./service
dockerfile: Dockerfile.dev
volumes:
- /app/node_modules
- ./service/config:/app/config
- ./service/src:/app/src
ports:
- "3001:3000"
ui:
build:
context: ./ui
dockerfile: Dockerfile.dev
volumes:
- /app/node_modules
- ./ui:/app
ports:
- "8081:8080"
作为将来的参考,如果您在同一端口上运行某些程序,只需将本地计算机端口绑定到其他端口即可
希望这有帮助。正如您所说的,在浏览器中访问的前端应用程序无法通过http://localhost:3001. 相反,react应用程序应该通过http://[ec2实例弹性ip]:3001访问API。您的react应用程序应存储在其代码中。ec2实例安全组应允许通过端口3001传入流量 以上设置足以解决此问题 但这里有一些额外的提示 将弹性IP分配给您的实例。否则,如果停止/启动实例,实例的公共IP地址将发生更改。 为您的API设置域名以实现灵活性、易于记忆、可以在任何位置重新部署并将域名指向新地址。有很多方法可以做到这一点,例如设置负载平衡器、使用ec2 origin设置CloudFront 设置SSL以获得更好的安全性许多方法都可以做到这一点,例如设置负载平衡器、使用ec2源代码设置CloudFront 由于react应用程序是一个静态网站,因此您可以轻松设置一个静态s3网站
希望这有帮助。请分享更多详细信息。其他容器正在运行reactjs是什么意思?是运行web服务器为react应用程序提供服务吗?共享docker compose文件。