programing

도커 마리아 데이터베이스에 접속하려면 어떻게 해야 하나요?

bestcode 2022. 9. 21. 00:09
반응형

도커 마리아 데이터베이스에 접속하려면 어떻게 해야 하나요?

입니다.docker run --name db -e MYSQL_ROOT_PASSWORD=test -d -p 3306:3306 mariadb dbsql db에 해야 요?

어디선가 임시 컨테이너(컨테이너를 삭제한 후)를 사용한 솔루션을 본 적이 있지만, 더 이상 찾을 수 없습니다.

sudo docker exec -it [other flags] [command] db.

mysql 클라이언트만, 추가 도커 컨테이너는 필요 없음

호스트에 mysql 클라이언트를 설치합니다.

apt-get install mysql-client

다음 명령을 사용하여 데이터베이스 컨테이너에 액세스합니다.

mysql -u<user> -p<pass> -h $(docker inspect --format '{{ .NetworkSettings.IPAddress }}' <db-container>)

이 명령어는 도커 컨테이너의 IP를 자동으로 가져옵니다.

'바꿔주세요'를 치환해주세요.<user>,<pass> ★★★★★★★★★★★★★★★★★」<db-container>각자의 가치관을 가지고 있습니다.다음 중 하나:

mysql -uroot -ptest -h $(docker inspect --format '{{ .NetworkSettings.IPAddress }}' db)

명령어를 사용하면 mariadb가 표준 포트 3306에서 실행됩니다.그렇지 않은 경우 mysql 명령어에 새 포트를 지정해야 합니다.

Mariadb 공식 웹사이트:

컨테이너 외부에서 MariaDB로의 연결

로컬 호스트의 MariaDB 서버에 접속하려고 하면 클라이언트는 네트워킹을 바이패스하고 로컬파일 시스템의 소켓파일을 사용하여 서버에 접속하려고 합니다.그러나 서버의 파일 시스템이 호스트에서 분리되었기 때문에 MariaDB가 컨테이너 내에서 실행 중일 때는 작동하지 않습니다.클라이언트는 컨테이너 내부의 소켓파일에 액세스 할 수 없기 때문에 접속에 실패합니다.

따라서 클라이언트가 서버 컨테이너와 같은 머신 상에서 실행되고 있는 경우에도 MariaDB 서버에 접속하려면 TCP를 사용해야 합니다.

공식 이미지를 포함한 대부분의 MariaDB 이미지에서는 #my.cnf# 파일의 bind-address 옵션을 사용하여 외부 TCP 연결이 비활성화되어 있습니다.이 가이드에서 사용하는 도커 이미지는 Ubuntu를 기반으로 하기 때문에 파일은 /etc/mysql/my.cnf에 있습니다.

MariaDB를 사용하려면 구성 파일을 편집하여 적절한 옵션을 변경한 후 컨테이너를 재시작해야 합니다.

컨테이너 내에서 my.cnf 파일을 편집하고 bind-address로 시작하는 행을 확인합니다.행의 선두에 해시를 붙여 코멘트 아웃 합니다.

#bind-address            = 127.0.0.1

파일을 저장합니다.

컨테이너 안에 있는 동안 shutdown 명령을 MariaDB로 전송합니다.서버가 셧다운되고 호스트에도 다시 종료됩니다.

mysqladmin -u root -p shutdown

컨테이너를 다시 시작합니다.이번에는 MariaDB 서버에서 네트워킹을 사용하도록 설정합니다.

docker start mariadbtest

컨테이너에 할당된 IP 주소를 찾습니다.

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mariadbtest

이제 해당 IP 주소에 대한 TCP 연결을 사용하여 MariaDB 서버에 연결할 수 있습니다.

TCP 접속 강제 실행

위와 같이 MariaDB에서 네트워크 연결을 활성화하면 컨테이너 외부에서 서버에 연결할 수 있습니다.

호스트에서 클라이언트를 실행하고 서버 주소("-h")를 이전 단계에서 발견한 컨테이너의 IP 주소로 설정합니다.

mysql -h 172.17.0.2 -u root -p

이 간단한 형식의 접속은 대부분의 상황에서 기능합니다.설정에 따라서는, 서버의 포토를 지정하거나, TCP 모드를 강제적으로 설정할 필요도 있습니다.

mysql -h 172.17.0.2 -P 3306 --protocol=TCP -u root -p

클러스터된 컨테이너 및 복제에 대한 포트 구성

별도의 Docker 컨테이너에서 실행되는 여러 MariaDB 서버는 TCP를 사용하여 서로 연결할 수 있습니다.이것은 Galera 클러스터를 형성하거나 복제하는 데 유용합니다.

도커를 통해 클러스터 또는 레플리케이션 셋업을 실행할 때는 컨테이너가 다른 포트를 사용하는 것이 좋습니다.이를 위한 가장 빠른 방법은 컨테이너 포트를 시스템의 다른 포트에 매핑하는 것입니다.컨테이너(docker run 명령어)를 작성할 때 필요에 따라 -p 옵션을 사용하여 여러 번 실행할 수 있습니다.예를 들어 Galera 노드의 경우 다음과 같은 매핑을 사용합니다.

-p 4306:3306 -p 5567:5567 -p 5444:5444 -p 5568:5568

먼저 컨테이너 터미널에 액세스합니다.

 docker exec -it some-mariadb bash

'some-some-adb'는 mysql 컨테이너 이름입니다.

그런 다음 mysql terminal 명령을 사용하여 직접 DB에 액세스합니다.

mysql -u root -p

MySQL 명령줄 클라이언트에서 MariaDB에 연결 다음 명령은 다른 mariadb 컨테이너 인스턴스를 시작하고 원래 mariadb 컨테이너에 대해 mysql 명령줄 클라이언트를 실행하여 데이터베이스 인스턴스에 대해 SQL 문을 실행할 수 있도록 합니다.

$ docker run -it --link some-mariadb:mysql --rm mariadb sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'

...여기서 some-mariadb는 원래 mariadb 컨테이너의 이름입니다.

MySQL 명령줄 클라이언트에 대한 자세한 내용은 MySQL 설명서를 참조하십시오.

참조: https://hub.docker.com/_/mariadb/

약간 다른 구문, ubuntu 18.04의 도커 180.05.0-ce:

sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' db

언급URL : https://stackoverflow.com/questions/33170489/how-can-i-access-my-docker-maria-db

반응형