Flo*_*ion 8 node.js docker vue.js docker-compose axios
我正在构建一个带有登录名的简单网站,我的 vue-frontend 需要从连接到 sql 数据库的 nodejs-backend 检索用户数据。我决定为此使用 docker-compose,据我了解,docker-compose 会自动为我的 docker-compose.yml 中提到的服务设置网络。
似乎不起作用的是我在代码中解决后端的方式。我怀疑这可能是因为我使用 axios 向后端发送请求的方式。
我已经检查了默认的 docker-network,并且能够使用我在网络配置中找到的 dns 名称从我的前端 ping 到我的后端。但是在我的代码中使用相同的名称不起作用。
有效的是将主机端口映射到我公开的 api 端口并使用http://localhost:5000作为地址,但这违背了 docker 网络的目的。
我的 docker-compose.yml:
version: '3.3'
services:
    vue-frontend:
        image: flowmotion/vue-js-frontend
        ports:
            - 8070:80
        depends_on:
            - db-user-api
    db-user-api:
        image: flowmotion/user-db-api
        environment:
            - PORT=5000
        ports:
            - 5000:5000 #only needed if docker network connection can't be established 
有问题的 Vue-fontend 文件:
登录.vue
methods: {
    async login() {
      try {
        const response = await authenticationService.login({
          email: this.email,
          password: this.password
        });
        this.$store.dispatch("setToken", response.data.token);
        this.$store.dispatch("setUser", response.data.user);
        this.$router.push({ path: "/" });
      } catch (error) {
        this.showError = true;
        this.error = error.response.data.error;
      }
    }
  }
};
</script>
认证服务.js
import api from "@/services/api";
export default {
  login(credentials) {
    return api().post("login", credentials);
  }
};
api.js
import axios from 'axios';
import config from '../config/config';
export default () => {
    return axios.create({
        baseURL: config.userBackendServer
    });
};
config.js ()
module.exports = {
    userBackendServer: 'http://cl-dashboard_db-user-api_1:5000' //this doesn't seem to work
};
//using 'http://localhost:5000' works if ports are mapped to host machine.
预期的结果将是我的后端进行 sql 查找。
实际结果是,我的前端没有连接到我的后端,而是给了我 404 状态,而我的后端从未到达
假设 docker 网络中的容器可以在不向外部世界开放任何端口的情况下相互通信,您是正确的。
重点是-您的 vue 应用程序不在任何容器中-它从容器作为 js 脚本文件提供给您的浏览器,浏览器将请求发送到您的节点后端。因为您的浏览器无论如何都不在 docker 网络内 - 您必须使用外部端口映射(localhost:5000在您的情况下)才能到达后端。
如果您对此有任何疑问,请告诉我。
| 归档时间: | 
 | 
| 查看次数: | 8109 次 | 
| 最近记录: |