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}}'
Другие вопросы по тегам