itsource

도커의 mysql 서버에 연결

mycopycode 2022. 9. 24. 12:36
반응형

도커의 mysql 서버에 연결

첫 번째 도커 컨테이너에서 mysql 서버를 실행하는 경우:

docker run --name mysqlserver -e MYSQL_ROOT_PASSWORD=pass -d mysql:5.5

및 두 번째 도커 컨테이너를 첫 번째 컨테이너와 연결합니다.

docker run --name myapp --link mysqlserver:mysql -d vladimir/app

두 번째 도커 컨테이너에 python 앱이 있고 첫 번째 컨테이너에 있는 데이터베이스에 연결하려고 하는데 어떤 호스트를 사용할지 어떻게 결정합니까?

나는 mysql에 대해 잘 모른다.mysql 문서를 보면 다음과 같은 명령어가 필요할 수 있습니다.

import _mysql
db=_mysql.connect(host="mysql",port=3306,passwd="...",db="...")

앱에서 --link를 실행했을 때 mysqlserver라는 이름의 컨테이너에 대한 EXPOSEd 포트를 myapp이라는 이름의 컨테이너에 연결한다고 선언했습니다.도커가 /etc/hosts 파일을 업데이트합니다.따라서 /etc/hosts 파일을 저장할 경우 다음과 같은 행이 표시됩니다.

172.17.0.26 mysql 5c960433e26a mysqlserver

이것이 바로 당신의 python에서 'host'를 호스팅하는 참조가 작동하는 이유입니다.기본 포트는 3306 입니다.그럼 서로 연결되겠군요python에서 사용하는 모든 mysql 연결 패키지에 이 호스트와 포트를 사용합니다.

이것이 다른 오브젝트와의 접속방법입니다.그것들의 well-kell-known port에서 접속할 수 있습니다.환경변수를 사용할 수도 있지만, 제 생각엔 이게 단계적으로 없어지고 있는 것 같아요.몰라...

root@d23d8be2a6fa:/# env | grep MYSQL
MYSQL_ENV_MYSQL_ROOT_PASSWORD=pass
MYSQL_PORT_3306_TCP_PORT=3306
MYSQL_PORT_3306_TCP=tcp://172.17.0.32:3306
MYSQL_ENV_MYSQL_VERSION=5.5.42
MYSQL_NAME=/myapp/mysql
MYSQL_PORT_3306_TCP_PROTO=tcp
MYSQL_PORT_3306_TCP_ADDR=172.17.0.32
MYSQL_ENV_MYSQL_MAJOR=5.5
MYSQL_PORT=tcp://172.17.0.32:3306

접속 회선을 변경해, 환경을 사용할 수 있도록 합니다.

import os
myhost = os.environ.get('MYSQL_PORT_3306_TCP_ADDR')
myport = int(os.environ.get('MYSQL_PORT_3306_TCP_PORT'))
import _mysql
db=_mysql.connect(host=myhost,port=myport,passwd="...",db="...")

어느 쪽이든.이것은 발견입니다.집정관, 스카이다인, 등록자 등 더 복잡한 방법도 있다.skydns/registrator 페어링이 마음에 들어 등록자가 도커 데몬을 감시하고 새 컨테이너가 생성되면 skydns가 DNS 서버를 모방하기 위해 사용할 수 있는 etcd에 DNS 레코드를 삽입합니다.이 기술을 사용하면 IP와 포트도 얻을 수 있습니다.

언급URL : https://stackoverflow.com/questions/29431549/connect-to-mysql-server-in-docker

반응형