从另一个容器连接到在Docker容器中运行的MySQL数据库

brtdzjyr  于 2023-08-02  发布在  Mysql
关注(0)|答案(1)|浏览(118)

我有一个docker-compose.yml文件,在其中运行airflow,一切运行正常。但是我有另一个容器的docker-compose.yml文件,我在其中设置了MySQL数据库。我想写一个pandas dataframe到那个数据库,但我不能。
气流调节器是最常用的调节器。

mysql db的docker-compose.yml:

version: '3'
services:
  mysql:
    image: mysql:latest
    container_name: mi_mysql
    restart: always
    ports:
        - '4004:3306'
    environment:
      MYSQL_ROOT_PASSWORD: matitorres
      MYSQL_DATABASE: testfligoo
    volumes:
      - ./init:/docker-entrypoint-initdb.d

字符串

airflow中的Python代码:

from sqlalchemy import create_engine
import pymysql
from airflow.hooks.base_hook import BaseHook

conn = BaseHook.get_connection('mysql')

engine = create_engine(f"mysql+pymysql://{conn.login}:{conn.password}@{conn.host}:{conn.port}/{conn.schema}")

df.to_sql('testdata', engine, if_exists='replace')


我收到的错误:

INFO - (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on 'mi_mysql' ([Errno -3] Temporary failure in name resolution)")
(Background on this error at: https://sqlalche.me/e/14/e3q8)


气流中连接的配置:
host:mi_mysql(mysql容器的名称)port:4004
我会感激任何帮助:)

rsl1atfo

rsl1atfo1#

您可以将两个合成文件合并为一个,这样所有容器将共享同一个网络。
或者,您将需要在两个文件中配置网络,这里是一个简单的示例。

compose 1

networks:
  my-network:
    driver: bridge

个字符
此配置将在运行docker-comose 1时使network成为my-network,然后在运行docker-compose 2时,它将容器附加到现有网络my-network
您也可以使用命令行创建网络,如docker network create my-network
然后像这样将配置添加到合成文件中

networks:
  my-network:
    external:
      name: my-network

相关问题