Docker 撰写:mariadb 的 getaddrinfo 失败
Docker compose: getaddrinfo for mariadb failed
我很不擅长创建 docker-compose,目前我在尝试构建新项目时遇到了问题。
构建后我无法在我的 php 应用程序容器中访问我的 mariadb 服务器,我遇到了这个错误:
PDO::__construct(): php_network_getaddresses: getaddrinfo for mariadb
failed: Name does not resolve
所以我知道配置有误,但我还不知道是什么。我尝试了很多更改,但没有任何效果。
这是我现在的 docker-compose.yml:
version: "3.8"
networks:
# used by some services (php) to communicate with other docker-compose.yaml
censored.com:
external:
name: censored.com
services:
app:
build:
context: .
target: symfony_php
args:
- secret=id=composerauth,src=${HOME}/.composer/auth.json
restart: unless-stopped
healthcheck:
interval: 10s
timeout: 3s
retries: 3
start_period: 30s
environment:
APP_ENV: dev
HOST: www.censored.lan
networks:
- default
- censored.com
volumes:
- ./:/srv/app:rw,cached
- ./docker/php/conf.d/symfony.dev.ini:/usr/local/etc/php/conf.d/symfony.ini
- ${HOME}/.composer/auth.json:/root/.composer/auth.json
# If you develop on Linux, comment out the following volumes to just use bind-mounted project directory from host
- ./var/cache:/srv/app/cache:rw
- ./var/log:/srv/app/logs:rw
depends_on:
- mariadb
extra_hosts:
- www.censored.lan:127.0.0.1
nginx:
build:
context: .
target: symfony_nginx
args:
- secret=id=composerauth,src=${HOME}/.composer/auth.json
restart: unless-stopped
depends_on:
- app
environment:
NGINX_DOMAIN: www.censored.lan
ports:
- 8001:80
volumes:
- ./docker/nginx/templates/dev.conf.template:/etc/nginx/templates/default.conf.template:ro
- ./docker/nginx/rules/rules.dev.conf:/etc/nginx/rules.conf:ro
- ./public:/srv/app/public:ro
- ./src:/srv/app/src:ro
mariadb:
image: mariadb:10.7
environment:
MYSQL_ROOT_PASSWORD: changeme
MYSQL_DATABASE: database
MYSQL_USER: user
MYSQL_PASSWORD: changeme
networks:
- default
- censored.com
ports:
- '3307:3306'
restart: on-failure
volumes:
- db_data:/var/lib/mysql
volumes:
db_data: {}
有人可以帮我解决这个问题吗?
谢谢!
问题与我的 docker-compose 配置文件无关。
我的应用程序是一个 PHP Symfony 应用程序,它在构建期间的初始“composer 安装”之后执行“缓存:清除”。 “缓存:清除”正在触发对尚未准备好的数据库的调用。
为了解决这个问题,我只需要在我的 Symfony 应用程序中将我的 mariadb 版本设置为我的“DATABASE_URL”参数,以避免无用的数据库查询。
我很不擅长创建 docker-compose,目前我在尝试构建新项目时遇到了问题。
构建后我无法在我的 php 应用程序容器中访问我的 mariadb 服务器,我遇到了这个错误:
PDO::__construct(): php_network_getaddresses: getaddrinfo for mariadb failed: Name does not resolve
所以我知道配置有误,但我还不知道是什么。我尝试了很多更改,但没有任何效果。
这是我现在的 docker-compose.yml:
version: "3.8"
networks:
# used by some services (php) to communicate with other docker-compose.yaml
censored.com:
external:
name: censored.com
services:
app:
build:
context: .
target: symfony_php
args:
- secret=id=composerauth,src=${HOME}/.composer/auth.json
restart: unless-stopped
healthcheck:
interval: 10s
timeout: 3s
retries: 3
start_period: 30s
environment:
APP_ENV: dev
HOST: www.censored.lan
networks:
- default
- censored.com
volumes:
- ./:/srv/app:rw,cached
- ./docker/php/conf.d/symfony.dev.ini:/usr/local/etc/php/conf.d/symfony.ini
- ${HOME}/.composer/auth.json:/root/.composer/auth.json
# If you develop on Linux, comment out the following volumes to just use bind-mounted project directory from host
- ./var/cache:/srv/app/cache:rw
- ./var/log:/srv/app/logs:rw
depends_on:
- mariadb
extra_hosts:
- www.censored.lan:127.0.0.1
nginx:
build:
context: .
target: symfony_nginx
args:
- secret=id=composerauth,src=${HOME}/.composer/auth.json
restart: unless-stopped
depends_on:
- app
environment:
NGINX_DOMAIN: www.censored.lan
ports:
- 8001:80
volumes:
- ./docker/nginx/templates/dev.conf.template:/etc/nginx/templates/default.conf.template:ro
- ./docker/nginx/rules/rules.dev.conf:/etc/nginx/rules.conf:ro
- ./public:/srv/app/public:ro
- ./src:/srv/app/src:ro
mariadb:
image: mariadb:10.7
environment:
MYSQL_ROOT_PASSWORD: changeme
MYSQL_DATABASE: database
MYSQL_USER: user
MYSQL_PASSWORD: changeme
networks:
- default
- censored.com
ports:
- '3307:3306'
restart: on-failure
volumes:
- db_data:/var/lib/mysql
volumes:
db_data: {}
有人可以帮我解决这个问题吗?
谢谢!
问题与我的 docker-compose 配置文件无关。
我的应用程序是一个 PHP Symfony 应用程序,它在构建期间的初始“composer 安装”之后执行“缓存:清除”。 “缓存:清除”正在触发对尚未准备好的数据库的调用。 为了解决这个问题,我只需要在我的 Symfony 应用程序中将我的 mariadb 版本设置为我的“DATABASE_URL”参数,以避免无用的数据库查询。