Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Docker không thể kết nối ứng dụng với MySQL

Docker-compo theo mặc định sẽ tạo mạng ảo mà tất cả các vùng chứa / dịch vụ trong tệp soạn thảo có thể kết nối với nhau bằng một địa chỉ IP. Bằng cách sử dụng các liên kết links , depends_on hoặc bí danh mạng mà chúng có thể kết nối với nhau bằng tên máy chủ. Trong trường hợp của bạn, tên máy chủ là tên dịch vụ, nhưng tên này có thể bị ghi đè. (xem: tài liệu )

Tập lệnh của bạn trong my_common_package vùng chứa / dịch vụ sau đó sẽ kết nối với mysql trên cổng 3306 theo thiết lập của bạn. (không phải localhost trên cổng 3306 )

Cũng lưu ý rằng sử dụng expose chỉ cần thiết nếu Dockerfile cho dịch vụ không có EXPOSE tuyên bố. Hình ảnh mysql tiêu chuẩn đã thực hiện điều này.

Nếu bạn muốn ánh xạ một cổng vùng chứa tới localhost bạn cần sử dụng ports , nhưng chỉ làm điều này nếu cần thiết.

Các dịch vụ
services:
   mysql:
     image: mysql:5.6
     container_name: test_mysql_container
     environment:
       - MYSQL_ROOT_PASSWORD=test
       - MYSQL_DATABASE=My_Database
       - MYSQL_USER=my_user
       - MYSQL_PASSWORD=my_password
     volumes:
       - db_data:/var/lib/mysql
     ports:
       - "3306:3306"

Ở đây chúng tôi đang nói rằng cổng 3306 trong vùng chứa mysql nên được ánh xạ tới localhost trên cổng 3306.

Bây giờ bạn có thể kết nối với mysql bằng localhost:3306 bên ngoài của docker. Ví dụ:bạn có thể thử chạy testsql.py của mình cục bộ (KHÔNG trong vùng chứa).

Giao tiếp vùng chứa với vùng chứa sẽ luôn xảy ra bằng cách sử dụng tên máy chủ của mỗi vùng chứa. Hãy coi vùng chứa như máy ảo.

Bạn thậm chí có thể tìm thấy trình soạn thảo docker mạng được tạo bằng cách sử dụng docker network list :

1b1a54630639        myproject_default             bridge              local
82498fd930bb        bridge                        bridge              local

.. sau đó sử dụng docker network inspect <id> để xem chi tiết.

Địa chỉ IP được chỉ định cho vùng chứa có thể khá ngẫu nhiên, vì vậy cách khả thi duy nhất để giao tiếp vùng chứa với vùng chứa là sử dụng tên máy chủ.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ngoại lệ Python MySQLdb

  2. CẬP NHẬT MySQL và CHỌN trong một lần vượt qua

  3. MySQL - mất bao lâu để tạo một chỉ mục?

  4. Làm thế nào để tạo biểu đồ trong MySQL?

  5. MYSQL chọn 3 hàng cuối cùng, đặt hàng theo ASC