PHP PDO를 사용하여 도커와 함께 실행되는 로컬 MariaDB에 연결할 수 없습니다.
로컬 개발을 위해 MariaDB, PHP-FPM 및 Nginx를 사용하는 로컬 Docker 컴포넌트 스택을 머신 상에서 실행하고 있습니다.브라우저에서 http://localhost:8080/의 Nginx에서 제공하는 웹 페이지에 정상적으로 액세스할 수 있습니다.호스트 127.0.0.1 포트 8889에서 로컬 GUI DB 브라우저인 TablePlus를 사용하여 데이터베이스에 성공적으로 연결할 수도 있습니다.사용자와 함께 동작합니다.root및 패스워드root(다만 이상하게도 Docker compose에서 MYSQL_USER, MYSQL_PASSWORD env 변수로서 설정된 다른 사용자에게는 충분하지 않습니다).
어쨌든, 다음의 PHP 코드를 사용해 PHP/PDO에 접속하려고 하면, 같은 credential이 됩니다.
$db = new PDO('mysql:host=localhost;port=8889;dbname=words', 'root', 'root');
...알겠습니다.Error: SQLSTATE[HY000] [2002] No such file or directory
편집: 및 사용 시:
$db = new PDO('mysql:host=127.0.0.1;port=8889;dbname=words', 'root', 'root');
...알겠습니다.Error: SQLSTATE[HY000] [2002] Connection refused
왜요?
(다음은 Docker 컴파일입니다.
version: "3"
services:
mariadb:
image: mariadb:10.5
container_name: mariadb-10.5
restart: unless-stopped
ports:
# port 3306 is the default port for mariadb, forwarded to 8889 on the local machine
- 8889:3306
volumes:
- ./mysql:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
php-fpm:
image: bitnami/php-fpm:7.4
container_name: phpfpm-7.4
restart: unless-stopped
ports:
- 9000:9000
volumes:
- ${WWW_DOCUMENT_ROOT}:/app
nginx:
image: bitnami/nginx:1.20
container_name: nginx-1.20
restart: always
ports:
- 8080:8080
volumes:
- ./nginx/logs:/opt/bitnami/nginx/logs/
- ./nginx/server-blocks/default.conf:/opt/bitnami/nginx/conf/server_blocks/default.conf:ro
- ${WWW_DOCUMENT_ROOT}:/app
depends_on:
- mariadb
- php-fpm
)
@danblack의 답변에 따르면 DB에 대한 연결은 Docker 컨테이너 내부에서 다른 컨테이너로 이루어지므로 다음과 같습니다.
컨테이너 간의 연결은 항상 재매핑되지 않은 포트를 사용합니다.따라서 DB 컨테이너에 연결하려면 재매핑된 노출된 8889 포트가 아닌 내부 MariaDB 표준 포트 3306을 사용해야 합니다.
DB의 호스트 이름은 DB 컨테이너 이름이어야 합니다(이 경우 MariaDB 컨테이너 이름).
mariadb-10.5)가 아닙니다.127.0.0.1또는localhost.
따라서 모든 PHP/PDO 연결 개체는 다음과 같습니다.
$db = new PDO('mysql:host=mariadb-10.5;dbname=words', 'root', 'root');
언급URL : https://stackoverflow.com/questions/71230710/cant-connect-to-local-mariadb-running-with-docker-with-php-pdo
'source' 카테고리의 다른 글
| Safari 및 Chrome 데스크톱 브라우저에서 비디오 자동 재생이 작동하지 않습니다. (0) | 2023.01.25 |
|---|---|
| size_t의 정의는 어디서 찾을 수 있습니까? (0) | 2023.01.25 |
| offset+limit을 사용하여 mySQL 쿼리에서 총 결과 수 찾기 (0) | 2023.01.25 |
| 고스트 이미지의 드래그 방지를 위한 CSS/JS (0) | 2023.01.25 |
| JavaScript에서 현재 날짜 및 시간 가져오기 (0) | 2023.01.15 |