【问题标题】:How can I link two Docker containers together? One is a MySQL container hosting the database, and the other is a Python flask application如何将两个 Docker 容器链接在一起?一个是托管数据库的 MySQL 容器,另一个是 Python flask 应用程序
【发布时间】:2022-12-07 05:32:09
【问题描述】:

我正在尝试使用两个单独的容器而不是 mysql 连接器在我的烧瓶应用程序和我的数据库之间建立一座桥梁。 我正在为我的应用程序使用 flask_mysqldb。

  ---docker-compose
     App
      |
      |--app.py
      |--dockerfile
     db
      |
      |--dockerfile
      |--db.sql 

这是我的 Docker-compose 文件

  version: '2'
  services:
    pythonapp:
        build: ./NewtestPythonProject
        command: sh -c "sleep 10s ; python3 ./main.py"
        ports:
        - '5000:5000'
        depends_on:
          - mysql
        
          
    mysql:
      build: ./MyDbDockerFile
      restart: always
      environment:
          MYSQL_DATABASE: 'profile'
          MYSQL_ROOT_PASSWORD: '1234'
      ports:
        - '3306:3306'

这是我的数据库 Dockerfile

FROM mysql:latest
COPY ./dcs.sql /docker-entrypoint-initdb.d/

这是我的应用程序 dockerfile

FROM python:3.9

WORKDIR /usr/app/src

COPY . /usr/app/src/

RUN pip3 install -r requirements.txt


EXPOSE 5000

这是我的连接字符串

from flask import *
from flask_mysqldb import MySQL
import yaml,re 
import MySQLdb.cursors
from passlib.hash import pbkdf2_sha256

app = Flask(__name__)
app.secret_key = 'This'
#-----------------------------database connection-----------
db = yaml.load(open("db.yaml"),Loader=yaml.FullLoader)
app.config["MYSQL_HOST"] =  db['mysql_host']
app.config["MYSQL_USER"] =  db['mysql_user']
app.config["MYSQL_PASSWORD"] =  db['mysql_password']
app.config["MYSQL_DB"] =  db['mysql_db']

MySQL = MySQL(app)

数据库.yaml

mysql_host: "localhost"
mysql_user: "root"
mysql_password: "1234"
mysql_db: "profile"

【问题讨论】:

  • 问题是什么 ?从你的 python webapp 你能到达 mysql:3306 吗?
  • @0x0fba 是我可以访问 mysql:3306,但是我无法连接我的应用程序和数据库容器。
  • 什么样的麻烦?您的 webapp 可以连接到您的数据库吗?使用docker logs可以帮助排除故障。
  • 我的 Webapp 容器无法连接到我的 MySQL Docker 容器,但在我的本地环境中一切正常。我无法让我的两个容器相互通信。
  • 您可以尝试将 docker-compose 更新到版本 3。并阅读容器的日志。

标签: python docker docker-compose sqlalchemy


【解决方案1】:

Db.yaml 中的行 mysql_host: "localhost" 更改为 mysql_host: "mysql" 因为本地主机是同一个容器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多