Lỗi kết nối MySQL với CakePHP khi dùng Docker
Mình mới bắt đầu sử dụng docker và khi chạy migrate bị lỗi này. Mình đã thử custom lại những thông tin liên quan tới database nhưng không thấy hiệu quả. Giờ phải chỉnh ở đâu vậy mọi người?
Link git: https://github.com/BlazingRockStorm/Calendar-Event
1 CÂU TRẢ LỜI
Thường thì chỉ cần config trong file config/app.php
thôi, file này cũng ở trong .gitignore
rồi, còn nếu muốn dùng file env thì phải sửa lại file config/bootstrap.php
: https://github.com/BlazingRockStorm/Calendar-Event/blob/master/config/bootstrap.php#L47,L62
Theo như file docker-compose của bạn thì config/app.php
sẽ trông như thế này:
'host' => 'mysql',
/*
* CakePHP will use the default DB port based on the driver selected
* MySQL on MAMP uses port 8889, MAMP users will want to uncomment
* the following line and set the port accordingly
*/
//'port' => 'non_standard_port_number',
'username' => 'root',
'password' => 'root',
'database' => 'schedule',
Test kết nối:
sudo docker-compose exec cakephp ./bin/cake migrations status
# Migrate
sudo docker-compose exec cakephp ./bin/cake migrations migrate
Bonus 1 nếu dùng docker-compose thì có thể sử dụng tên của service thay cho tên container
Bonus 2 đoạn environment trong docker-compose cakephp service cũng không cần nữa https://github.com/BlazingRockStorm/Calendar-Event/blob/master/docker-compose.yml#L17
cũng không được
Giờ bạn xóa file config/app.php
, rồi chạy composer install lại cho nó sinh ra file config mới rồi thay đổi 4 cái tham số như trên thử xem, chắc bạn config nhầm chỗ nào rồi
sudo docker-compose exec cakephp composer install
Chạy composer install chưa bạn?
Em gửi cái config DB connection lên đây được không Có vẻ như em đang config connect đến DB thông qua unix socket nên nó báo là "No such file or directory"
Do em đang dùng Docker (docker compose) và chạy Mysql ở một container khác, nên em cần connect qua port 3306 của container mysql, chứ không phải file
mysql.sock
ở localhost.@thangtd90 em vẫn theo cái post này mà mò theo thôi ạ https://blog.cloud66.com/deploying-your-cakephp-applications-with-cloud-66/ với lại em chỉnh ở app.php và .env của cake. không biết chỉnh chỗ nào thì đúng
@huukimit chắc chắn chạy rồi
@devil_boom_129 Trong file
app.php
có đoạn nàythì tức là nó sẽ ưu tiên giá trị trong file
.env
, nếu trong file.env
không định nghĩa, thì nó sẽ lấy giá trị mặc định ở phía sau.Em check lại phần config
'host' => env('MYSQL_URL', null),
nhé, xem host của em đang trỏ sang đâu? Nếu đang làlocalhost
thì phải đổi thành tên service (hostname) của container mysql.Đồng thời thêm cái config
port
vào nữa.Dựa vào thông tin thì em đặt như này ạ
cơ mà có vẻ chưa đúng lắm