Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 节点和反应器的停靠设置_Node.js_Reactjs_Docker_Docker Compose - Fatal编程技术网

Node.js 节点和反应器的停靠设置

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

我想运行两个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.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文件。