Gitlab-ci 运行 mysql docker 并连接错误 ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (111)

Gitlab-ci running mysql docker and connect it with error ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (111)

我看到还有其他 post 关于这些问题,但没有关于下面描述的特定 cific 案例。 在我的 gitlab-ci 测试管道配置中,我想 运行 a mysql docker,并直接从我的 运行ner 连接到它。但是我很难连接到数据库。 这是我的 gitlab-cy-yml 测试步骤:

services:
    - docker:dind
    - mysql:5.7
  script:
     - apt-get update && apt-get install -y git curl libmcrypt-dev default-mysql-client
     - mysql --version
     - sleep 20
     - docker login -u XXXXXXXX -p XXXXXXXXX
     - docker pull mysql:5.7
     - docker run --name ticketsDB -d -p 3304:3306 -it -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:5.7
     - mysql --protocol=tcp -u root -P 3304
     - create database ticketOnline;
     - use ticketOnline;

错误发生在 mysql --protocol=tcp -u root -P 3304 个连接期间:

ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (111)

我哪里做错了?

您的设置中不需要 docker:dind 服务。

job:
  variables:
    MYSQL_ALLOW_EMPTY_PASSWORD: "true"
    MYSQL_DATABASE: ticketsDB
  services:
    - mysql:5.7
  script:
     - apt-get update && apt-get install -y git curl libmcrypt-dev default-mysql-client
     - mysql --version
     - sleep 20
     - mysql --protocol=tcp -u root -P 3304 -h mysql -e "create database ticketOnline; use ticketOnline;"
     
     # -h to specify the host and -e to run a SQL query

编辑:

ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (111)

发生错误是因为您尝试连接到 localhost 而不是 mysql 服务。默认情况下,服务具有 GitLab 默认创建的别名。 Learn More in the docs.

如果您需要多个 mysql 实例,您可以像这样使用多个别名:

services:
    - name: mysql:5.7
      alias: mysql-1
    - name: mysql:5.7
      alias: mysql-2
script: 
  - mysql mysql --protocol=tcp -u root -P 3304 -h mysql-1 # to connect to the first
  - mysql --protocol=tcp -u root -P 3304 -h mysql-2 # to connect to the second.