반응형
실패상황1
1Airflow에서 mysql_default를 사용중에 localhost:3306을 설정하여 커넥션을 시도하였으나
실패하였다.
실패상황2
docker inspect containerId 를 통해서 내부 ip를 파악해여 커넥션을 시도하였으나
실패하였다.
이유가 무엇일까 생각해보니 네트워크가 서로 분리되어있었다.
mysql은 기본 네트워크 (bridge)에 존재하였고
airflow는 생성할때 입력한 네트워크에 container들과 함께 생성되었다.
# 네트워크 리스트 명령어
docker network ls
# 해당 네트워크에 어떤 컨테이너가 있는지, 또는 정보를 확인하는 명령어
docker network inspect networkName
# docker network inspect bridge
# docker network inspect "airflow network name"
서로 다른 네트워크에 존하는것을 확인하였다. 그렇다면 어떻게 해야할까 ?
내가 작업한 방법은 airflow network에 mysql container를 붙여서 내부 아이피를 사용하는 방법을 사용하였다.
먼저 local-mysql container를 bridge 네트워크에서 제거하는 명령어
docker network disconnect bridge local-mysql
이후 airflow network에 local-mysql을 붙이는 명령어
docker network connect "airflow network name" local-mysql
이후 잘되었는지 확인
docker network inspect "airflow network name"
# docker network inspect hyper-dmp-v2-workflow_default 결과
[
{
"Name": "hyper-dmp-v2-workflow_default",
"Id": "97e809b8c591b205ab25ac0ac0c30efcbea1628cf0dbafb977a5ff00af551906",
"Created": "2021-08-17T06:18:29.488748Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": true,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"290d92d8050eabee9e160f3e0439df8fb5d4d4d622a8f14317f68966c68d9947": {
"Name": "workflow_airflow-worker_1",
"EndpointID": "f28016d500d349b9dcc123db5f4312bca8226b6ebb3d4552f571b732b7e6be65",
"MacAddress": "02:42:ac:12:00:05",
"IPv4Address": "172.18.0.5/16",
"IPv6Address": ""
},
"3ea2b515e45b2bd3d17b4e5b34f8ddb3ad5eb5d773c55a71724d7dfa7eb9a8c8": {
"Name": "workflow_airflow-webserver_1",
"EndpointID": "3e38cb185a20ba33157d363574b2fd6844c3834ebe633713321dbcd7ece26a4d",
"MacAddress": "02:42:ac:12:00:07",
"IPv4Address": "172.18.0.7/16",
"IPv6Address": ""
},
"5a2cebcd308971a2db78a321ba99f304004111fcdffab2648f2264d8e156a359": {
"Name": "workflow_airflow-scheduler_1",
"EndpointID": "2cd982cea25db9651d98a503d9009e1ed20d68c09c513ca9c5894708d06b58ee",
"MacAddress": "02:42:ac:12:00:04",
"IPv4Address": "172.18.0.4/16",
"IPv6Address": ""
},
**"8e68ca23d180eca523b5c1bc35d44c11c5ffab95b7734724279582313df5d0c9": {
"Name": "local-mysql",
"EndpointID": "e9dd16cdf8fdd1856cea04ee2ba74948928bd796b681f8182c81ac6ed1711f6e",
"MacAddress": "02:42:ac:12:00:06",
"IPv4Address": "172.18.0.6/16",
"IPv6Address": ""
},# 이 부분이 추가 된 부분**
"b3788433fb68182e847b8d782e38cd07caffdf4f7de41bba59a8705d1cd00cc9": {
"Name": "workflow_redis_1",
"EndpointID": "6ed71a24bf27c327ed996fbaae0ade72bee75c4e371b80d11aefff8167aadef7",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
},
"c3a4444096dd17a2d43449fc5c0273c786ba9c14cd328ef3818bc6724cd985d0": {
"Name": "workflow_flower_1",
"EndpointID": "27d9564194beebf24cced1e5802e5e49b2d55e2bc89cea6f4ef95d26481f2d6f",
"MacAddress": "02:42:ac:12:00:08",
"IPv4Address": "172.18.0.8/16",
"IPv6Address": ""
},
"ce08580c8b40b50798a37ab39072e22f3bc9c37cae1fc9adb328ec5cc0b1ac53": {
"Name": "hworkflow_postgres_1",
"EndpointID": "d7640e67ec833bb595c4af43ce374d80eeaf049a70af8e0c9afc68c098e6a40f",
"MacAddress": "02:42:ac:12:00:03",
"IPv4Address": "172.18.0.3/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {
"com.docker.compose.network": "default",
"com.docker.compose.project": "workflow",
"com.docker.compose.version": "1.29.1"
}
}
]
A네트워크에 Container를 붙여서 내부아이피를 사용하게 만드는 법이다.
보통 로컬 컴퓨터에 DB를 깔고 docker로 다른 제품을 사용하다보면 이렇게 네트워크까지 가지고있는 docker compoer파일들이 있는데
이런것들을 사용하던 로컬 DB와 혼용할때 유용하다.