我有一个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
我会感激任何帮助:)
1条答案
按热度按时间rsl1atfo1#
您可以将两个合成文件合并为一个,这样所有容器将共享同一个网络。
或者,您将需要在两个文件中配置网络,这里是一个简单的示例。
个字符
此配置将在运行docker-comose 1时使network成为my-network,然后在运行docker-compose 2时,它将容器附加到现有网络
my-network
。您也可以使用命令行创建网络,如
docker network create my-network
然后像这样将配置添加到合成文件中
型