Yêu cầu thg 2 13, 2019 8:15 SA 384 0 1
  • 384 0 1
0

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

Chia sẻ
  • 384 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

thg 2 13, 2019 8:24 SA

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

Avatar Tran Duc Thang @thangtd90
thg 2 13, 2019 8:28 SA

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.

Avatar Hoàng Đức Quân @devil_boom_129
thg 2 13, 2019 8:32 SA

@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

Avatar Hoàng Đức Quân @devil_boom_129
thg 2 13, 2019 8:33 SA

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

Avatar Tran Duc Thang @thangtd90
thg 2 13, 2019 8:38 SA

@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.

Avatar Hoàng Đức Quân @devil_boom_129
thg 2 13, 2019 8:50 SA

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

1 CÂU TRẢ LỜI


Đã trả lời thg 2 14, 2019 2:11 SA
Đã được chấp nhận
+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

Chia sẻ
Avatar Hoàng Đức Quân @devil_boom_129
thg 2 14, 2019 2:59 SA

cũng không được 😦

thg 2 14, 2019 3:17 SA

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
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí