gpt4 book ai didi

python - 将 Docker 容器用于前端和后端时,CORS 失败

转载 作者:IT老高 更新时间:2023-10-28 21:26:04 25 4
gpt4 key购买 nike

以下代码在 docker 容器之外运行良好。现在我想为后端添加一个容器,为前端添加另一个容器。所以我创建了两个 Dockerfiles(这可能是无趣的)和下面的 docker-compose 文件。我将 axios.get('http://127.0.0.1:5000/api/test') 更改为 axios.get('http://backend:80/api/test' ) 在 vue 组件中。我能够从前端容器 ping 后端容器,并且能够通过 curl 接收 api 结果。但是 axios 不能再发出这个 api 请求了。在 Firefox 控制台中我得到错误:

Error: "Network Error"
Cross-Origin request blocked [...] Reason: CORS request did not succeed

但我可以在网络中的一台计算机上运行 docker 外部的后端,而在另一台计算机上运行前端。所以Cross-Origin在docker之外是没有问题的。这里有什么问题?我不知道。


docker-compose.yml

version: '2'
services:
backend:
build: ./backend
container_name: backend
ports:
- "80:80"
environment:
- FLASK_APP=app/main.py
- FLASK_DEBUG=1
- 'RUN=flask run --host=0.0.0.0 --port=80'
networks:
- some-net

frontend:
build: ./frontend
container_name: frontend
ports:
- "90:80"
networks:
- some-net

networks:
some-net:
driver: bridge

原代码

python 中的后端

from flask import Flask, jsonify
from flask_cors import CORS

app = Flask(__name__)
CORS(app, resources=r'/api/*')

@app.route('/api/test')
def test():
return jsonify({
"foo": "bar"
})

if __name__ == '__main__':
app.run(debug=True)

frondend(仅 vue.js 组件)

<template>
<div class="hello">
<h1>Message is: {{ msg }}</h1>
</div>
</template>

<script>
import axios from 'axios'

export default {
name: 'HelloWorld',
data () {
return {
msg: ''
}
},
created () {
axios.get('http://127.0.0.1:5000/api/test').then(response => {
console.log(response.data)
this.msg = response.data.foo
}).catch(error => {
console.log(error)
})
}
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped></style>

最佳答案

您似乎误会了如何从所有容器外部引用 docker 容器。

axios.get('http://127.0.0.1:5000/api/test')...

应该指 docker 容器正在监听的位置。在容器内部,这确实是 backend,但在外部,即在您的 Web 浏览器中,它将是对运行容器的主机的引用,然后是端口。由于您已将其安装在主机的 80 端口(前端为 90),您应该将 get 更新为:

axios.get('http://{hostname or ip}:80/api/test')

如果它们都在同一主机上运行,​​那么您可以使用 127.0.0.1 或 localhost 进行测试。

关于python - 将 Docker 容器用于前端和后端时,CORS 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52309527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com