다른 컨테이너에서 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. 여기서 서비스 이름은 동시에 내부 네트워크의 호스트 이름입니다.
도커 문서에서 인용한 내용:
도커 컴포지트 업을 실행하면 다음과 같은 일이 발생합니다.
- myapp_default라는 네트워크가 생성됩니다.
- 웹의 구성을 사용하여 컨테이너를 만듭니다.웹이라는 이름으로 네트워크 myapp_default에 가입합니다.
- 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
'programing' 카테고리의 다른 글
| __getitem__에서 슬라이싱 구현 (0) | 2023.09.11 |
|---|---|
| ASP 버전이 충돌합니다.검색된 NET 웹 페이지: 지정된 버전이 "1.0.0.0"이지만 빈의 버전이 "2.0.0.0"입니다. (0) | 2023.09.11 |
| 테이블 행 높이 설정 (0) | 2023.09.11 |
| 동일 템플릿 내의 Angular2 다중 라우터 출력 (0) | 2023.09.11 |
| mariadb, 4번째 galera 노드 추가 실패 (0) | 2023.09.11 |