私のコード(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"
内部/外部の概念とDockerコンテナのポート番号の可視性についてまだ完全に理解していません。
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"