Hướng dẫn docker can t connect to mysql - docker không thể kết nối với mysql

ĐƯỢC RỒI. Cuối cùng tôi đã giải quyết được vấn đề này. Dưới đây là giải pháp của tôi được sử dụng trong https://sqlflow.org/sqlflow.

Giải pháp hoàn chỉnh

Để làm cho bản demo khép kín, tôi đã chuyển tất cả các mã cần thiết sang https://github.com/wangkuiyi/mysql-server-in-docker.

Chìa khóa của giải pháp

Tôi không sử dụng hình ảnh chính thức trên dockerhub.com https://hub.docker.com/r/mysql/mysql-erver. Thay vào đó, tôi đã tự làm bằng cách cài đặt MySQL trên Ubuntu 18.04. Cách tiếp cận này cho tôi cơ hội để bắt đầu MySQLD và liên kết nó với 0,0.0.0 (tất cả các IPS).bind it to 0.0.0.0 (all IPs).

Để biết chi tiết, vui lòng tham khảo các dòng này trong repo GitHub của tôi.

SQLFLOW_MYSQL_HOST=${SQLFLOW_MYSQL_HOST:-0.0.0.0}

echo "Start mysqld ..."
sed -i "s/.*bind-address.*/bind-address = ${SQLFLOW_MYSQL_HOST}/" \
    /etc/mysql/mysql.conf.d/mysqld.cnf
service mysql start

Để xác minh giải pháp của tôi

  1. Git nhân bản repo đã nói ở trên.
    git clone https://github.com/wangkuiyi/mysql-server-in-docker
    cd mysql-server-in-docker
    
  2. Xây dựng hình ảnh Docker máy chủ MySQL
    docker build -t mysql:yi .
    
  3. Khởi động máy chủ MySQL trong thùng chứa
    docker run --rm -d -p 23306:3306 mysql:yi
    
  4. Cài đặt máy khách MySQL trên máy chủ, nếu chưa. Tôi đang chạy Ubuntu 18.04 trên máy chủ (máy trạm của tôi), vì vậy tôi sử dụng
    docker build -t mysql:yi .
    
    0.
    sudo apt-get install -y mysql-client
    
  5. Kết nối từ máy chủ với máy chủ MySQL đang chạy trong container.
    mysql --host 127.0.0.1 --port 23306 --user root -proot
    

Kết nối từ một thùng chứa khác trên cùng một máy chủ

Chúng tôi có thể chạy máy khách MySQL từ ngay cả một container khác (trên cùng một máy chủ).

docker run --rm -it --net=host mysql/mysql-server mysql \
   -h 127.0.0.1 -P 13306 -u root -proot

Kết nối từ máy chủ khác

Trên iMac của tôi, tôi cài đặt máy khách MySQL bằng homebrew.

brew install mysql-client
export PATH="/usr/local/opt/mysql-client/bin:$PATH"

Sau đó, tôi có thể truy cập vào máy chủ Ubuntu ở trên (192.168.1.22).

mysql -h 192.168.1.22 -P 13306 -u root -proot

Kết nối từ một thùng chứa chạy trên máy chủ khác

Tôi thậm chí có thể chạy máy khách MySQL trong một thùng chứa chạy trên iMac để kết nối với máy chủ MySQL trong một thùng chứa trên máy trạm Ubuntu của tôi.

docker run --rm -it --net=host mysql/mysql-server mysql \
    -h 192.168.1.22 -P 13306 -u root -proot

Một trường hợp đặc biệt

Trong trường hợp chúng tôi chạy máy khách và máy chủ MySQL trong các thùng chứa riêng biệt chạy trên cùng một máy chủ - điều này có thể xảy ra khi chúng tôi thiết lập CI, chúng tôi không cần phải xây dựng hình ảnh Docker máy chủ MySQL của riêng mình. Thay vào đó, chúng ta có thể sử dụng

docker build -t mysql:yi .
1 khi chúng ta chạy thùng chứa máy khách.

Để khởi động máy chủ

git clone https://github.com/wangkuiyi/mysql-server-in-docker
cd mysql-server-in-docker
0

Để bắt đầu khách hàng

git clone https://github.com/wangkuiyi/mysql-server-in-docker
cd mysql-server-in-docker
1

Hi,

Tôi đã làm như sau để bắt đầu một thùng chứa docker mysql:

git clone https://github.com/wangkuiyi/mysql-server-in-docker
cd mysql-server-in-docker
2

Tôi đã xác minh rằng nó đang chạy với:

git clone https://github.com/wangkuiyi/mysql-server-in-docker
cd mysql-server-in-docker
3

Và cũng đã đăng nhập vào Conainer với:

git clone https://github.com/wangkuiyi/mysql-server-in-docker
cd mysql-server-in-docker
4

Những gì tôi không thể đạt được là kết nối thông qua máy chủ Docker MySQL-CLI với thùng chứa Docker như thế này:

git clone https://github.com/wangkuiyi/mysql-server-in-docker
cd mysql-server-in-docker
5

Cái này cũng không làm việc:

git clone https://github.com/wangkuiyi/mysql-server-in-docker
cd mysql-server-in-docker
6

Điều này cũng không hoạt động:

git clone https://github.com/wangkuiyi/mysql-server-in-docker
cd mysql-server-in-docker
7

Tôi đã phát hiện ra IP của container Docker trên cầu Docker:

git clone https://github.com/wangkuiyi/mysql-server-in-docker
cd mysql-server-in-docker
8

Nhưng sử dụng iPadress cũng không hoạt động:

git clone https://github.com/wangkuiyi/mysql-server-in-docker
cd mysql-server-in-docker
9

Tôi có quá ngu ngốc khi sử dụng Docker hay tôi đã nhận được một cái gì đó sai về mặt khái niệm hoặc một cái gì đó khác.

Cảm ơn vì đã giác ngộ!

Không thể kết nối với máy chủ MySQL trên Docker?

Thông thường có nghĩa là không có máy chủ MySQL chạy trên hệ thống hoặc bạn đang sử dụng tên tệp unix không chính xác hoặc số cổng TCP/IP khi cố gắng kết nối với máy chủ. Bạn cũng nên kiểm tra xem cổng TCP/IP bạn đang sử dụng chưa bị chặn bởi tường lửa hoặc dịch vụ chặn cổng.there is no MySQL server running on the system or that you are using an incorrect Unix socket file name or TCP/IP port number when trying to connect to the server. You should also check that the TCP/IP port you are using has not been blocked by a firewall or port blocking service.

Tôi có thể sử dụng mysql với docker không?

MySQL là một trong những cơ sở dữ liệu quan hệ tương thích SQL phổ biến nhất.Chạy MySQL bên trong container Docker cho phép bạn tách cơ sở dữ liệu của mình khỏi mã của mình.Bạn cũng có thể sử dụng một dàn nhạc container như Kubernetes để mở rộng quy mô MySQL độc lập với thể hiện máy chủ API của bạn.Running MySQL inside a Docker container lets you separate your database from your code. You can also use a container orchestrator like Kubernetes to scale MySQL independently of your API server instance.

Không thể kết nối với máy chủ MySQL thông qua ổ cắm?

Một giải pháp khả thi khác cho> không thể kết nối với máy chủ MySQL cục bộ thông qua thông báo ổ cắm> là thử và kết nối với MySQL bằng địa chỉ IP 127.0.0.1 thay vì localhost.Khi bạn sử dụng localhost để kết nối với MySQL, hệ điều hành sử dụng đầu nối ổ cắm.try and connect to the MySQL using the 127.0. 0.1 ip address instead of localhost. When you use localhost to connect to MySQL, the operating system uses the socket connector.

Số cổng mặc định của MySQL là gì?

Cổng 3306 là cổng mặc định cho Giao thức MySQL cổ điển (Cổng), được sử dụng bởi máy khách MySQL, đầu nối MySQL và các tiện ích như MySQLDump và MySQLPump. is the default port for the classic MySQL protocol ( port ), which is used by the mysql client, MySQL Connectors, and utilities such as mysqldump and mysqlpump.