osx 에서 docker container 로 mysql 을 띄웠을 때, DB container 에 접속이 안되는 문제

$ docker run --name db -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql

입력하면 mysql container 가 db 라는 이름으로 만들어져서 동작한다.

$ docker exec -it db bash

명령으로 들어가 보면 root prompt 가 떠서 여러가지 동작을 할 수 있게 된다.

# mysql -uroot -p

접속해서 테이블이나 데이타베이스도 만들 수 있다.

그 뒤에 'OSX 터미널'에서 다음과 같이 명령을 치면

$ mysql -uroot -h192.168.99.100 -p

(192.18.99.100 은 osx 에 깔린 docker-machine 의 ip 다. 보통 상황마다 다르니 꼭 확인하자)

ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.99.100' (61)

위와 같은 에러가 발생한다. OSX 에서는 docker-machine 에서 도커를 띄우기 때문에 포트를 연결시켜서 띄워줘야 한다. 즉

$ docker run --name db -e MYSQL_ROOT_PASSWORD=my-secret-pw -p 3306:3306 -d mysql

포트 연결시켜주는 커맨드를 필수로 띄워줘야 한다.

Express (Node.js의 웹 프레임 워크) 에서의 Middleware 개념은 쉽게 설명하자면 Java 에서의 Filter 와 비슷한 개념입니다. 자주 쓰이고 통념적으로 쓰이는 행위들을 미리 걸러주는 역할을 한다고 볼 수 있습니다.  

예로 들면 express 가 내부적으로 쓰고 있는 formidable 은 HTTP의 request 를 정리하는데 탁월합니다. 그러나 개발자가 매번 formidable 을 불러서 정리하는 것이 번거로울 수가 있기 때문에 이를 middleware 로 만들어서 

   app.use(express.bodyParser());


이런식으로 선언만 해두면 사용이 되는 것입니다. (내부적으로 formidable 이 쓰이고 있음. ) 

이런 미들웨어를 만드는 법이 찾아보진 않았지만 예제가 많지는 않습니다. (너무 쉬워서 그럴 수도..)


다행히 위 링크에 가면 fineuploader 가 올리는 xhr 방식의 asynchronous 데이타 전송을 잡아채서 req.files 에 정리하는 부분을 미들웨어로 구현한 소스가 있습니다. 비록 옛날 소스이긴 하지만 (요즘 express 가 너무 많이 발전을 한 관계로..) 어떻게 미들웨어를 만드는지 참조하시면 좋을 듯합니다. 



글을 퍼올 수가 없어서 어쩔 수 없이 제 gist 에 올렸습니다. 원문은 위에 링크되어 있는 주소로 가면 나옵니다. (동작하는지에 대한 보장은 해 드릴 수 없습니다) 

(req, res, next) 로 이루어진 전형적인 미들웨어형 함수 선언이 보입니다. 위 사이트를 가면 어떻게 npm 패키지를 만드는 지에 관한 방법도 감을 잡으실 수가 있을 것입니다. 

+ Recent posts