드라이버에서 예외가 발생했습니다: SQLSTATE[HY000] [2002] 연결이 거부되었습니다. - docker - Symfony

드라이버에서 예외가 발생했습니다: SQLSTATE[HY000] [2002] 연결이 거부되었습니다. - docker - Symfony

내 코드(symfony 5.4)는 데이터베이스에 데이터를 저장할 수 없습니다. 이것은 내 설정입니다.

docker-compose.yaml

...
#MySQL Service
  db:
    image: mysql:5.7.22
    container_name: db
    restart: unless-stopped
    tty: true
    ports:
      - "3316:3306"
    environment:
      MYSQL_DATABASE: pink
      MYSQL_ROOT_PASSWORD: password
      SERVICE_TAGS: dev
      SERVICE_NAME: mysql
    volumes:
      - dbdata:/var/lib/mysql
      - ./docker/mysql/my.cnf:/etc/mysql/my.cnf
    networks:
      - app-network
...

.env

DATABASE_URL="mysql://root:password@db:3316/pink"

제품 컨트롤러.php

#[Route('/product/create', name: 'product_create')]
    public function createProduct(ManagerRegistry $doctrine): Response
    {
        $entityManager = $doctrine->getManager();

        $product = new Product();
        $product->setName('Keyboard');
        $product->setPrice(1999);
        $product->setDescription('Ergonomic and stylish!');

        // tell Doctrine you want to (eventually) save the Product (no queries yet)
        $entityManager->persist($product);

        // actually executes the queries (i.e. the INSERT query)
        $entityManager->flush();

        return new Response('Saved new product with id '.$product->getId());

    }

데이터베이스(docker) 컨테이너가 정상적으로 실행되고 있습니다. 다음은 테스트입니다. 작동했습니다.

mysql --host=127.0.0.1 --user=root --password=password pink --port=3316 --ssl-mode=disabled

내 파일에서 문자열을 위의 docker 컨테이너 이름으로 .env바꿨습니다 .127.0.0.1db

어떤 아이디어가 있나요?

답변1

결과적으로 데이터베이스 연결에 기본 포트 번호(예: )를 사용해야 합니다 3306. 전체 데이터베이스 문자열은 다음과 같습니다.

DATABASE_URL="mysql://root:password@db:3306/pink"

내부/외부 개념과 도커 컨테이너의 포트 번호 가시성에 대해 아직 완전히 이해하지 못했습니다.

db:
    ...
    ports:
      - "3316:3306"

답변2

Docrine WSL2를 사용하여 동일한 문제가 발생하여 다음 줄을 추가해야 했습니다./etc/hosts

127.0.0.1 db

.env파일에서 다음 구성을 사용하십시오.

DATABASE_URL="mysql://root:password@db:3306/my_database_name?serverVersion=8.0.3&charset=utf8mb4"

관련 정보