내 코드(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.1
db
어떤 아이디어가 있나요?
답변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"