programing

다른 컨테이너에서 mysql 컨테이너에 액세스

easyjava 2023. 9. 11. 22:26
반응형

다른 컨테이너에서 mysql 컨테이너에 액세스

3306을 노출시키는 mysql로 도커 컨테이너를 설정했습니다.데이터베이스 사용자, 데이터베이스 비밀번호를 지정하고 테스트 db를 만들어 새로운 사용자에게 권한을 부여했습니다.
다른 컨테이너에서 나는 이 db에 접근하고 싶습니다.
그래서 나는 이 db에 새로운 테이블을 만드는 단순한 php 스크립트로 새로운 컨테이너를 설정했습니다.
mysql container의 ip가 172.17.0.2인 것으로 알고 있습니다.

$mysqli = new mysqli("172.17.0.2", "mattia", "prova", "prova");

mysqli를 사용하는 것보다 새 테이블을 만들고 모든 것이 잘 작동합니다.
하지만 그의 IP주소를 이용한 컨테이너 연결은 좋지 않다고 생각합니다.
db host를 지정하는 다른 방법이 있습니까?mysql 컨테이너의 호스트 이름으로 시도해 보았지만 작동이 되지 않습니다.

--link플래그는 레거시 기능으로 간주되므로 사용자 정의 네트워크를 사용해야 합니다.

두 컨테이너를 동일한 네트워크에서 실행할 수 있습니다.

docker run -d --name php_container --network my_network my_php_image

docker run -d --name mysql_container --network my_network my_mysql_image

해당 네트워크의 모든 컨테이너는 컨테이너 이름을 호스트 이름으로 사용하여 서로 통신할 수 있습니다.

도커 실행 명령에서 --link flag를 사용하거나 도커 합성에서 링크 기능을 사용하여 도커 컨테이너를 연결해야 합니다.예를 들어 다음과 같습니다.

docker run -d -name app-container-name --link mysql-container-name app-image-name

이런 방식으로 도커는 애플리케이션 컨테이너의 /etc/hosts 파일에 mysql 컨테이너의 IP 주소를 추가합니다.전체 문서는 MySQL Docker Containers를 참조하십시오. 기본 이해하기

도커 컴포지트를 사용하는 경우 서비스 이름으로 데이터베이스에 액세스할 수 있습니다.

version: "3.9"
services:
  web:
    build: .
    ports:
      - "8000:8000"
  db:
    image: postgres
    ports:
      - "8001:5432"

그러면 다음을 사용하여 데이터베이스에 액세스할 수 있습니다.postgres://db:5432. 여기서 서비스 이름은 동시에 내부 네트워크의 호스트 이름입니다.

도커 문서에서 인용한 내용:

도커 컴포지트 업을 실행하면 다음과 같은 일이 발생합니다.

  1. myapp_default라는 네트워크가 생성됩니다.
  2. 웹의 구성을 사용하여 컨테이너를 만듭니다.웹이라는 이름으로 네트워크 myapp_default에 가입합니다.
  3. db의 구성을 사용하여 컨테이너를 생성합니다.네트워크 myapp_default에 db라는 이름으로 가입합니다.

출처 : https://docs.docker.com/compose/networking/

docker-dock.yml 파일에서 웹 서버 서비스에 링크 속성을 추가합니다. https://docs.docker.com/compose/networking/ #http:///////////////////////#

그런 다음 쿼리 문자열에서 호스트 매개 변수의 값은 데이터베이스 서비스 이름입니다.

$mysqli = new mysqli("database", "mattia", "prova", "prova");
environment:
  - MYSQL_ROOT_PASSWORD=password
  - MYSQL_DATABASE=dbname
  - MYSQL_ROOT_HOST=%

--

MYSQL_ROOT_HOST=%

를 로 설정하는 중%docker-dock에서 이합니다.docker-dock.yml이다를kke다서를ns이rsk .

MYSQL_ROOT_HOST: 기본적으로 MySQL은 'root'@'localhost' 계정을 만듭니다.이 계정은 컨테이너 내에서 MySQL 서버에 연결에 설명된 대로 컨테이너 내부에서만 연결할 수 있습니다.다른 호스트로부터의 루트 연결을 허용하려면 이 환경 변수를 설정합니다.예를 들어 기본 도커 게이트웨이 IP인 172.17.0.1 값은 컨테이너를 실행하는 호스트 시스템과의 연결을 허용합니다.이 옵션은 하나의 항목만 허용하지만 와일드카드는 허용됩니다(예: MYSQL_ROOT_HOST=172...).* 또는 MYSQL_ROOT_HOST=%).

출처 : https://dev.mysql.com/doc/refman/8.0/en/docker-mysql-more-topics.html#docker_var_mysql-root-host

언급URL : https://stackoverflow.com/questions/35429920/access-to-mysql-container-from-other-container

반응형