首页 > 解决方案 > 将前端烧瓶容器连接到后端烧瓶容器

问题描述

我是 docker 新手,我正在尝试使用 docker-compose.yml 文件将 2 个烧瓶容器连接在一起:

码头工人-compose.yml

    version: "3.7"
    services:
      frontend:
        build:
          context: ./frontEnd
        container_name: frontend
        depends_on: [backend]
        ports: 
          - "5000:1973"
        networks:
          - my_own_network
        links:
          - "backend:backend"
      backend:
        build:
          context: ./backEnd
        container_name: backend
        ports:
          - "5001:5000"
        networks:
          - my_own_network
      networks:
          my_own_network:

后端.py

    from flask import Flask, jsonify, request  
    my_app = Flask(__name__)
    @my_app.route('/generateKeys',methods = ['POST'])
    def generateKeys() :
        values = request.get_json()
        if (values['fullname']=="NAAAME" and values['pass']=="PASS"):
            return 'new_key : HERES_YOUR_KEY' , 201
        else :
            return '_error : Invalid submitted informations' , 300
    if __name__ == '__main__' :
        my_app.run(host='0.0.0.0')

前端.py

    from flask import Flask, jsonify, render_template , request 
    import requests , json , ast
    BackENDnode = 'http://backend:5000'
    FE_app = Flask(__name__ , template_folder = 'templates')
    @FE_app.route('/SubmitCitizenInfo', methods=['POST'])
    def submit_citizen_informations():
        citizen_object = {
            'fullname' : str(request.form["citizen_name"]),
            'pass' : str(request.form["citizen_pass"]),
        }
        keys_url = "{}/generateKeys".format(BackENDnode)
        keys_request = requests.post( keys_url,
            json = citizen_object,
            headers={'Content-type' : 'application/json'})
        if not keys_request.status_code == 300 || not keys_request.status_code == 201 :
            err = '_error : Something went wrong somehow '+str(keys_url)
            return render_template('/Public/error.html', err = err )
    if __name__ == '__main__' :
        FE_app.run(host = '0.0.0.0', debug=True ,port=1973)
    

Error.html_displaying

_error : 出了点问题 http://backend:5000/generateKeys

码头工人撰写--版本

docker-compose 版本 1.26.0,构建 d4451659

我的目录树:

- docker-compose.yml
- backEnd
    |- Dockefile
    |- backend.py
    |- BErequirements.txt
- frontEnd : 
    |- Dockerfile
    |- frontend.py
    |- FErequirements.txt
    |- templates
      |- error.html
      |- signUp.html
      |- displayingKeys.html 
    |- Static
      |- JS
      |- IMGS
      |- CSS

标签: dockerflask

解决方案


如果您使用相同的 compose-file,docker-compose 将从它们创建一个默认网络,删除网络定义,它们应该可以使用http://backend:5000url 访问。

Baiscally 当您调用时docker-compose up,您会看到说为 compose 文件中的所有服务创建默认网络,您可以使用docker network ls.

要从默认网络访问服务,您可以使用http//:<service_name>:<port>, where services for you arebackendfrontend.

当您想要桥接到不共享公共网络的容器时,使用网络定义。

http://localhost:5000删除网络定义后,您还可以使用它来访问后端节点。


推荐阅读