Cirrus CI - не удается подключиться к дополнительному контейнеру MySQL
Я использую контейнер на Cirrus CI, а в моем .cirrus.yml
, Я определил additional_container
для запуска экземпляра MySQL для тестирования в соответствии с документами:
.cirrus.yml
container:
image: node:latest
additional_containers:
- name: mysql
image: mysql:8
port: 3306
cpu: 1.0
memory: 512Mi
env:
MYSQL_ROOT_PASSWORD: "pa55w0rd"
Я пытаюсь запустить CREATE DATABASE
команду для этого экземпляра в одной из моих задач настройки:
...
mysql_setup_script:
- mysql -uroot -ppa55w0rd -P3306 -hlocalhost -e "CREATE DATABASE voluble_test;"
...
Я установил клиент MySQL (но не сервер, поскольку это приведет к поражению объекта) в моем тестовом контейнере. Однако MySQL действует так, как если бы он подключался к настоящей базе данных localhost, и, похоже, ищет локально установленный сервер MySQL - и выдает следующую ошибку:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory")
Тем не менее, в документации Cirrus CI указано, что экземпляр MySQL должен быть доступен на localhost:
Тесты смогут получить доступ к экземпляру MySQL через localhost:3306.
Я не вижу очевидного способа обойти это - какой-нибудь совет?
1 ответ
С помощью localhost
приведет к тому, что mysql не будет использовать сеть.
Используйте либо 127.0.0.1
или IP-адрес хоста докера, в зависимости от сетевых конфигураций.
Обратите внимание, что ошибка не является сетевой ошибкой:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
"через сокет '/var/run/mysqld/mysqld.sock'", этот файл не указывает на сокет mysql внутри вашего контейнера докеров.
Получите IP-адрес хоста докера с помощью:
$ docker network inspect bridge --format='{{ (index .IPAM.Config 0).Gateway}}'