PHP 응용 프로그램이 도커 작성을 사용하여 MariaDB에 연결할 수 없습니다.
내 응용 프로그램은 Docker Compose를 사용하여 설정되었습니다.docker-compose.yml 콘텐츠
version: "3.1"
services:
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
db:
image: mariadb:10.4
restart: always
ports:
- "3307:3306"
volumes:
- ./mysql:/var/lib/mysql
container_name: mariadb
environment:
- MYSQL_DATABASE=dbname
- MYSQL_PASSWORD=dbpass
- MYSQL_RANDOM_ROOT_PASSWORD=yes
- MYSQL_USER=dbuser
phpapp:
depends_on:
- nginx-proxy
- db
image: myhub/myrepo
restart: always
container_name: phpapp
expose:
- 80
- 443
environment:
- APP_ENV=prod
- APP_SECRET="secret"
- CORS_ALLOW_ORIGIN="^.*?$$"
- DATABASE_URL="mysql://dbuser:dbpass@db/dbname"
- VIRTUAL_HOST=phpapp.com
networks:
default:
external:
name: nginx-proxy
다만, 애플리케이션의 데이타베이스에 접속하려고 하면, 에러 메세지가 표시됩니다.SQLSTATE[HY000] [2002] No such file or directory
.
단, 올바른 사용자 이름과 비밀번호를 사용하여 로컬호스트 포트 3307에 접속할 수 있습니다.또한 컨테이너에 접속할 때docker exec -ti phpapp /bin/bash
실행하다env
열거된 환경변수가 모두 맞았습니다.
실행할 때docker network inspect nginx-proxy
알겠습니다.
[
{
"Name": "nginx-proxy",
"Id": "2529933d7e38cfba34e0e876e43a96fc4c8d7321c1e89048319ba804b00e1026",
"Created": "2018-12-12T05:04:01.9044879Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
컨테이너 배열은 비어 있지만 docker-compose.yml에서 기본(외부) 네트워크가 설정되어 있습니다.
stackoverflow에 오신 것을 환영합니다:)
아마도 phpapp 컨테이너에서 링크되지 않은 db 컨테이너에서는 동작하지 않는 것 같습니다.이렇게 해주시면 안 돼요?
version: "3.1"
services:
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
db:
image: mariadb:10.4
restart: always
ports:
- "3307:3306"
volumes:
- ./mysql:/var/lib/mysql
container_name: mariadb
environment:
- MYSQL_DATABASE=dbname
- MYSQL_PASSWORD=dbpass
- MYSQL_RANDOM_ROOT_PASSWORD=yes
- MYSQL_USER=dbuser
phpapp:
depends_on:
- nginx-proxy
links:
- db
image: myhub/myrepo
restart: always
container_name: phpapp
expose:
- 80
- 443
environment:
- APP_ENV=prod
- APP_SECRET="secret"
- CORS_ALLOW_ORIGIN="^.*?$$"
- DATABASE_URL="mysql://dbuser:dbpass@db/dbname"
- VIRTUAL_HOST=phpapp.com
networks:
default:
external:
name: nginx-proxy
db를 depends_on에서 링크로 이동했습니다.데이터베이스 연결에서 호스트 이름으로 db를 사용해야 합니다.
내가 도울 수 있으면 좋겠다.
음, 이 문제에 대한 해결책을 찾았어요.하지만, 그것은 내가 예상했던 것이 아니다.데이터베이스 URL은 다음과 같이 정의됩니다.
DATABASE_URL="mysql://dbuser:dbpass@db/dbname"
다음과 같이 따옴표가 없어야 합니다.
DATABASE_URL=mysql://dbuser:dbpass@db/dbname
이제 모든 것이 작동하는 것 같습니다. 언제 왜 인용문을 사용할 수 있고 사용할 수 없는지 아는 사람이 있습니까?
언급URL : https://stackoverflow.com/questions/53738437/php-application-cant-connect-to-mariadb-using-docker-compose
'programing' 카테고리의 다른 글
마지막 개별 레코드 세트 가져오기 (0) | 2022.11.29 |
---|---|
Mysql 5.7에서 JSON 어레이 내의 특정 개체를 갱신하는 방법 (0) | 2022.11.29 |
대응하는 컬럼에 2개의 고유값이 저장되어 있는데도 카디널리티가 "1"로 보고된다. (0) | 2022.11.29 |
PHPMyAdmin 오류: #126 - 테이블의 잘못된 키 파일 (0) | 2022.11.29 |
대소문자를 구분하지 않는 교환 (0) | 2022.11.29 |