docker-compose - Gitlab-ci wit symfony:php_network_getaddresses:getaddrinfo失败:名称或服务未知
问题描述
我第一次用 docker 和 symfony 创建了 gitlab-ci.yml。我学习。我不明白为什么它不起作用。我试图更改数据库的名称。也许我忘记了一些事情。我迷路了。
我需要你帮助我。非常感谢你
这是错误
$ php bin/console doctrine:database:drop --if-exists --force -e test
In AbstractMySQLDriver.php line 93:
An exception occurred in driver: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known
In PDOConnection.php line 31:
SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known
In PDOConnection.php line 27:
SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known
In PDOConnection.php line 27:
PDO::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known
这是 gitlab-ci 文件
default:
image: php:7.2-fpm
services:
- mysql:latest
cache:
paths:
- vendor/
variables:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: sf4-reims
stages: # Ici on déclare toutes nos étapes
- build
- test
job:build:
stage: build
script:
- apt-get update
- curl -sSk https://getcomposer.org/installer | php -- --disable-tls &&
- mv composer.phar /usr/local/bin/composer
- composer install --prefer-dist
- echo $CI_JOB_STAGE
job:test:
stage: test
script:
- apt-get update
- apt-get install -y git zip zip unzip
- docker-php-ext-install pdo pdo_mysql
- cp .env.test .env
- php bin/console doctrine:database:drop --if-exists --force -e test
- bin/console doctrine:database:create --if-not-exists -e test
- bin/console doctrine:schema:drop --force --no-interaction -e test
- bin/console doctrine:schema:create --no-interaction -e test
- bin/console doctrine:fixtures:load --no-interaction --purge-with-truncate -vvv -e test
- echo $CI_JOB_STAGE
这是文件 .env
APP_ENV=test
DATABASE_URL=mysql://root:root@database:3306/sf4-reims
这是文件 docker-compose.yml
version: '3'
services:
apache:
container_name: ${CONTAINER_NAME}_apache
image: httpd:2.4.41
ports:
- ${APACHE_PORT}:80
- ${APACHE_PORT_SSL}:443
volumes:
- ./${DIRECTORY_PROJECT}:/var/www/html
- .docker/httpd/httpd.conf:/usr/local/apache2/conf/httpd.conf
- .docker/httpd/logs:/var/log/httpd
depends_on:
- php
networks:
- front-network
- back-network
database:
image: mysql
command: "--default-authentication-plugin=mysql_native_password"
container_name: ${CONTAINER_NAME}_database
volumes:
- .docker/data/db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
networks:
- back-network
php:
build: .docker/php
container_name: ${CONTAINER_NAME}_php
volumes:
- ./${DIRECTORY_PROJECT}:/var/www/html
- .docker/php/php.ini:/usr/local/etc/php/php.ini
environment:
- maildev_host=${CONTAINER_NAME}_maildev
depends_on:
# - maildev
- database
networks:
- back-network
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: ${CONTAINER_NAME}_phpmyadmin
environment:
PMA_HOST: database
PMA_PORT: ${MYSQL_PORT}
ports:
- ${PHPMYADMIN_PORT}:80
links:
- database
networks:
- back-network
解决方案
我知道这是 9 个月前发布的,但我相信我刚刚遇到了同样的问题,但可以通过在gitlab-ci.yml
.
我可以看到您在 中“索引”您的 mysql 容器database
,docker-compose.yml
所以我相信您的应用程序引用了 mysql 主机,就像database
在您的应用程序配置 ( config/packages/doctrine.yaml
doctrine.dbal.host
) 中一样。在这种情况下,你应该写
default:
image: php:7.2-fpm
services:
- name: mysql:latest
alias: database
代替
default:
image: php:7.2-fpm
services:
- mysql:latest
在你的gitlab-ci.yml
. 如果您在主机设置中使用另一个名称,那么您应该使用它作为别名。
推荐阅读
- sql - 如何查找是否定义了 SORTKEY 以及它是如何从目录表中定义的?
- oracle - 如何在 oracle 中查找特定值
- wpf - wpf TreeView 绑定具有多个 TreeViewItemStyle
- javascript - 未捕获的 SyntaxError:意外的保留字(等待)
- javascript - 即使在成功的 API 调用之后,Ember 也不会填充模型
- reactjs - 更改主题时性能缓慢
- sparql - SPARQL wikidata group-by:获取答案中的分组项目(具有多个城市的河流)
- java - Spring 框架 Java
- android - 将 Meteor Cordova 构建的应用程序连接到本地服务器和数据库
- mqtt - Mosquitto MQTT 代理的远程管理 API