도커가 PHP로 mariadb에 연결할 수 없습니다.
Docker는 처음이라 PHP를 사용하여 MariaDB 컨테이너에 연결하는 방법을 찾고 있지만 성공하지 못했습니다.
stackoverflow와 google에서 검색해 보았지만, 도움이 되는 정보를 찾을 수 없었기 때문에, 도움이 되었으면 합니다.
이상한 점은 JetBrains DataGrip에서 localhost, mysql, root, admin을 사용하여 MariaDB에 연결하려고 하면 데이터베이스에는 연결할 수 있지만 PDO에는 연결할 수 없다는 것입니다.
시간 내주셔서 정말 감사합니다
다음은 프로젝트 파일입니다.
이것은 저의 docker-compose.yml 파일입니다.
version: "3.1"
services:
nginx:
image: nginx:alpine
container_name: nginx
volumes:
- ./config/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
ports:
- "80:80"
links:
- php
php:
image: php:7.1-fpm
container_name: php
links:
- mariadb:mysql
volumes:
- ./public:/public
ports:
- "9000:9000"
mariadb:
image: mariadb:10.1
container_name: database
environment:
MYSQL_ROOT_PASSWORD: admin
ports:
- "3306:3306"
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
links:
- mariadb
ports:
- 8183:80
environment:
PMA_HOST: mariadb
PMA_USER: root
PMA_PASSWORD: admin
PMA_ARBITRARY: 1
nginx.conf 파일:
server {
listen 80 default;
client_max_body_size 108M;
access_log /var/log/nginx/application.access.log;
root /public;
index index.php;
if (!-e $request_filename) {
rewrite ^.*$ /index.php last;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log";
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
include fastcgi_params;
}
}
그리고 내 index.php 파일은
<?php
$servername = "localhost";
$username = "root";
$password = "admin";
$database = "mysql";
try {
$conn = new PDO("sqlite:host=".$servername.";dbname=" . $database, $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = $conn->prepare("SELECT * FROM testDB");
$sql->execute();
while($result = $sql->fetch(PDO::FETCH_ASSOC)){
$result['myTestData'];
}
}
catch(PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
?>
이는 호스트 이름을 사용하여 데이터베이스 서버에 접속하려고 하기 때문입니다.localhost
php 컨테이너에서 php 컨테이너로 해결됩니다(와 동일).127.0.0.1
).
변경하셔야 합니다.$servername
compose 파일의 mariadb 서비스 이름과 동일한 변수입니다."mariadb"
.
이 경우 단일 기본 네트워크에 있는 모든 컨테이너는 서비스 이름(특히)으로 해결됩니다. 그렇기 때문에 링크가 필요하지 않습니다. 이 링크는 다소 권장되지 않습니다.
또한 (만일을 위해) DB 컨테이너가 실제로 시작되었고 연결을 수신할 준비가 되었는지 확인하십시오.처음 시작하는 데 시간이 좀 걸려요.
직접 만들어 보세요.Dockerfile
mysql ext를 설치합니다.도커 구성 yml은 따로 둡니다.
FROM php:7.1-fpm
RUN docker-php-ext-install pdo pdo_mysql
docker-timeout.yml:
php:
build: .
container_name: php
links:
- mariadb:mysql
volumes:
- ./public:/public
ports:
- "9000:9000"
언급URL : https://stackoverflow.com/questions/46508038/docker-cant-connect-to-mariadb-with-php
'source' 카테고리의 다른 글
Ubuntu에서 Oracle의 Java를 기본 Java로 설정하는 방법은 무엇입니까? (0) | 2023.01.12 |
---|---|
MySQL Update 쿼리의 '필드 목록'에 알 수 없는 열이 있습니다. (0) | 2023.01.12 |
MySQL 쿼리의 여러 열 인덱스 이해 (0) | 2023.01.02 |
MariaDB/MySQL 테이블 암호화 (0) | 2023.01.02 |
Concurrent Linked Queue 사용방법 (0) | 2023.01.02 |