Asked Feb 13th, 8:15 AM 101 0 1
  • 101 0 1
0

Lỗi kết nối MySQL với CakePHP khi dùng Docker

Share
  • 101 0 1

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

Feb 13th, 8:24 AM

Chạy composer install chưa bạn?

0
| Reply
Share
Thang Tran Duc @thangtd90
Feb 13th, 8:28 AM

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.

0
| Reply
Share
Hoàng Đức Quân @devil_boom_129
Feb 13th, 8:32 AM

@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

0
| Reply
Share
Hoàng Đức Quân @devil_boom_129
Feb 13th, 8:33 AM

@huukimit chắc chắn chạy rồi

0
| Reply
Share
Thang Tran Duc @thangtd90
Feb 13th, 8:38 AM

@devil_boom_129 Trong file app.php có đoạn này

'username' => env('MYSQL_USERNAME', 'root'),
'password' => env('MYSQL_PASSWORD', ''),

thì 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.

0
| Reply
Share
Hoàng Đức Quân @devil_boom_129
Feb 13th, 8:50 AM

Screen Shot 2019-02-13 at 3.46.52 PM.png

Dựa vào thông tin thì em đặt như này ạ

'host' => env('MYSQL_URL', 'calendar-event_mysql1'),
'port' => 3306,

cơ mà có vẻ chưa đúng lắm

0
| Reply
Share

1 ANSWERS


Answered Feb 14th, 2:11 AM
Accepted
+1

@devil_boom_129

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

Share
Hoàng Đức Quân @devil_boom_129
Feb 14th, 2:59 AM

cũng không được 😦

0
| Reply
Share
Feb 14th, 3:17 AM

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
0
| Reply
Share