Cirrus CI - Не удается подключиться к дополнительному контейнеру MySQL - PullRequest
0 голосов
/ 26 марта 2020

Я запускаю контейнер на 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 действует так, как если бы он подключался к true localhost DB и ищет локально установленный сервер 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 docs заявляет, что экземпляр MySQL должен быть доступен на localhost:

Тесты смогут получить доступ к экземпляру MySQL через localhost : 3306.

Я не вижу очевидного пути решения этой проблемы - любой совет?

1 Ответ

0 голосов
/ 26 марта 2020

Использование localhost приведет к тому, что mysql не будет использовать сеть.

Используйте 127.0.0.1 или ваш docker IP-адрес хоста, в зависимости от конфигурации сети.

Обратите внимание, что ошибка не является сетевой ошибкой:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'

"через сокет" /var/run/mysqld/mysqld.sock '", этот файл не указывает на сокет mysql внутри вашего docker контейнер.

Получите ваш docker IP-адрес хоста с:

$ docker network inspect bridge --format='{{ (index .IPAM.Config 0).Gateway}}'
...