将前端烧瓶容器连接到后端烧瓶容器

时间:2020-06-29 03:45:13

标签: docker flask

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

docker-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:

backend.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')

frontend.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 --version

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

1 个答案:

答案 0 :(得分:0)

如果您使用相同的compose文件,则docker-compose将从其中创建一个默认网络,删除网络定义,并且应使用http://backend:5000作为URL来访问它们。

当您致电docker-compose up时,会发现这就是为撰写文件中的所有服务创建默认网络,您可以使用docker network ls进行查看。

要从默认网络访问服务,请使用http//:<service_name>:<port>,其中为您提供的服务为backendfrontend

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

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