SQLSTATE[HY000] [2002] 当我将容器作为服务运行时,Gitlab CI 中没有这样的文件或目录

问题描述 投票:0回答:1

为了在 Gitlab CI 中使用 Playwright 运行端到端测试,我在之前的工作中构建了应用程序所需的 docker 容器:

在 e2e 工作中,我使用容器作为服务:

e2e_tests:
  rules:
    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
    - if: ($CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH)
  stage:
    e2e_test
  needs:
    - build_api_dev
    - build_frontend_dev
  image:
    name: mcr.microsoft.com/playwright:v1.47.2-noble
  services:
    - name: mysql:8.0.32
      alias: database
    - name: schickling/mailcatcher
      alias: mailcatcher
    - name: $CI_REGISTRY_IMAGE:api-dev-$CI_COMMIT_SHA
      alias: api
    - name: $CI_REGISTRY_IMAGE:api-nginx-dev-$CI_COMMIT_SHA
      alias: nginx
    - name: $CI_REGISTRY_IMAGE:frontend-dev-$CI_COMMIT_SHA
      alias: frontend
  variables:
    MYSQL_DATABASE_NAME: symfony
    MYSQL_ROOT_PASSWORD: root
    MYSQL_USER: symfony
    MYSQL_PASSWORD: symfony
    MYSQL_DATABASE: symfony_test
    DB_HOST: localhost
    DB_USER: $MYSQL_ROOT_PASSWORD
    DB_PASSWORD: $MYSQL_ROOT_PASSWORD
    DB_DATABASE: $MYSQL_DATABASE
    FRONTEND_URL: http://localhost:3000
    REACT_APP_PUBLIC_API_URL: http://localhost
  script:
    - mysql -h database -u root -proot <<< "SET GLOBAL sql_mode = '';"
    - mysql -h database -u root -proot symfony < db/dump-latest.sql
    - cd e2e
    - npm install
    - npm run test
  artifacts:
    name: "e2e-tests Report $CI_MERGE_REQUEST_TITLE"
    paths:
      - e2e/playwright-report/
    expire_in: 1 week

无法建立数据库连接,我看到以下错误:

SQLSTATE[HY000] [2002] No such file or directory

当我在本地(在 docker-compose 中)运行容器时,它使用相同的数据库映像。

有什么特殊配置需要吗?

mysql docker symfony gitlab-ci
1个回答
0
投票

错误 在

SQLSTATE[HY000] [2002]
中,尝试使用 Unix 套接字而不是 TCP 连接连接到数据库的程序通常是导致错误“没有这样的文件或目录”的原因。 GitLab 持续集成要求您与主机名(在本例中为
database
)和端口(对于 MySQL 为
3306
)建立连接,以便服务能够通过网络运行。

更改

DB_HOST
变量以使用服务别名而不是
localhost
来解决此问题:

variables:
  DB_HOST: database
© www.soinside.com 2019 - 2024. All rights reserved.