0

我在 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 上可用:

测试将能够通过 localhost:3306 访问 MySQL 实例。

我看不到明显的解决方法-有什么建议吗?

4

1 回答 1

0

使用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'”,该文件不指向docker容器内的mysql套接字。

使用以下命令获取您的 docker 主机 IP:

$ docker network inspect bridge --format='{{ (index .IPAM.Config 0).Gateway}}'
于 2020-03-26T14:41:48.783 回答