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

Đây là docker-compose của tôi

version: '2'

services:
  nginx:
    image: nginx:1.11.8-alpine
    ports:
      - "8081:80"
    volumes:
      - ./code:/usr/share/nginx/html
      - ./html:/myapp
      - ./site.conf:/etc/nginx/conf.d/site.conf
      - ./default.conf:/etc/nginx/conf.d/default.conf
      - ./error.log:/var/log/nginx/error.log
      - ./nginx.conf:/etc/nginx/nginx.conf
    links:
      - phpfpm
  phpfpm:
    image: php7-fpm:latest
    ports:
      - "9000:9000"
    volumes:
      -  ./code:/usr/share/nginx/html
    links:
      - db_mysql
  db_mysql:
    image: mysql:5.7.17
    volumes:
      - db_data:/var/lib/mysql
    # restart: no
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: wp2017
      MYSQL_USER: wp
      MYSQL_PASSWORD: wp2017
volumes:
  db_data:

Đây là cách tôi xây dựng php7-fpm của riêng mình: cuối cùng

FROM php:7.1-fpm-alpine
RUN docker-php-ext-install mysqli

Tôi không thể kết nối với container mysql

$serverName = 'localhost';
$userName = 'wp';
$password = 'wp2017';
$dbName = 'wp2017';

$link = mysqli_connect($serverName, $userName, $password, $dbName);

if (mysqli_connect_errno()) {
   printf("Connect failed: %s\n", mysqli_connect_error());
  exit();
}

Tôi luôn gặp lỗi: "Cảnh báo: mysqli_connect (): (hy000/2002): Không có tệp hoặc thư mục như vậy trong /usr/share/nginx/html/db.php trên dòng 8 Kết nối không thành công: Không có tệp hoặc thư mục đó"

Nơi tôi chạy lệnh sudo netstat -tulpn | GREP: 3306

Tôi nhận được TCP6 0 0 0 ::: 3306 :::* Nghe 15362/Docker-Proxy

Xin vui lòng giúp đỡ !

Nhiều nắng

unread,

Ngày 9 tháng 2 năm 2021, 10:06:44 PM2/9/212/5/21

đến Redbeanphp

Chỉ để làm rõ .. tôi đã thay đổi tệp PHP của mình và có thể kết nối với MySQL mà không cần Redbean .. và sau đó tôi đã cố gắng kết nối với cùng một DB với Redbean:

docker-compose.yml: 

``` 

Chỉ để làm rõ .. tôi đã thay đổi tệp PHP của mình và có thể kết nối với MySQL mà không cần Redbean .. và sau đó tôi đã cố gắng kết nối với cùng một DB với Redbean:

services:

yêu cầu 'rb.php';

// PHP đơn giản mà không có redbean

$ host = 'mysql';

$ user = 'root';

$ pass = 'rootpassword';

$ Conn = new mysqli ($ host, $ user, $ pass);

if ($ Conn-> Connect_error) {

chết ("Kết nối không thành công:". $ Conn-> Connect_error);

}

// Làm việc tốt!

// Tạo cơ sở dữ liệu có tên NewDB

$ sql = "Tạo cơ sở dữ liệu newdb";

if ($ Conn-> truy vấn ($ sql) === true) {

echo "cơ sở dữ liệu được tạo thành công với tên NewDB"; // làm việc tốt!

} khác {

echo "Lỗi tạo cơ sở dữ liệu:". $ Conn-> lỗi;

}

// Kết nối đóng

// Cố gắng kết nối với cùng một cơ sở dữ liệu với Redbean

$ Conn = new mysqli ($ host, $ user, $ pass);

if ($ Conn-> Connect_error) {

chết ("Kết nối không thành công:". $ Conn-> Connect_error);

// Làm việc tốt!

// Tạo cơ sở dữ liệu có tên NewDB

$ sql = "Tạo cơ sở dữ liệu newdb";

if ($ Conn-> truy vấn ($ sql) === true) {

echo "cơ sở dữ liệu được tạo thành công với tên NewDB"; // làm việc tốt!

} khác {

echo "Lỗi tạo cơ sở dữ liệu:". $ Conn-> lỗi;

volumes:

}

``` 

index.php:

// Kết nối đóng

Hình ảnh: MySQL: 5.7

yêu cầu 'rb.php';

print("hi");

// PHP đơn giản mà không có redbean

$ post = r :: phân phối ('post');

$ post-> tiêu đề = 'kỳ nghỉ của tôi';

$ id = r :: store ($ post);

$ post = r :: load ('post', $ id);

print_r($post);

?>

`` `

Thông báo lỗi:

`` `Lỗi gây tử vong: PDOException chưa được thực hiện: Không thể kết nối với cơ sở dữ liệu (TestDB). in /var/www/html/rb.php:1101 Stack Trace: #0 /var/www/html/rb.php(798): RedBeanphp \ Driver \ rpdo-> Connect () /rb.php(1171): redbeanphp \ driver \ rpdo-> runquery ('show blay', mảng) #2 /var/www/html/rb.php(1192) Hiển thị bảng ', mảng) #3 /var/www/html/rb.php(4318): redbeanphp \ driver \ rpdo-> getcol (' show blay ', mảng) #4 /var/www/html/rb.php . /html/rb.php(9539): redbeanphp \ queryWriter \ AqueryWriter-> TableExists ('Post') #7 /var/www/html/rb.php(9641) #8 /var/www/html/rb.php(9773): redbeanphp \ repository \ fluid-> createdetableifnotexist (Object (redbeanphp \ oodbbean), 'post') . /rb.php on l ine & nbsp; 1101 `` `: Uncaught PDOException: Could not connect to database (testdb). in /var/www/html/rb.php:1101 Stack trace: #0 /var/www/html/rb.php(798): RedBeanPHP\Driver\RPDO->connect() #1 /var/www/html/rb.php(1171): RedBeanPHP\Driver\RPDO->runQuery('show tables', Array) #2 /var/www/html/rb.php(1192): RedBeanPHP\Driver\RPDO->GetAll('show tables', Array) #3 /var/www/html/rb.php(4318): RedBeanPHP\Driver\RPDO->GetCol('show tables', Array) #4 /var/www/html/rb.php(7193): RedBeanPHP\Adapter\DBAdapter->getCol('show tables') #5 /var/www/html/rb.php(6138): RedBeanPHP\QueryWriter\MySQL->getTables() #6 /var/www/html/rb.php(9539): RedBeanPHP\QueryWriter\AQueryWriter->tableExists('post') #7 /var/www/html/rb.php(9641): RedBeanPHP\Repository->tableExists('post') #8 /var/www/html/rb.php(9773): RedBeanPHP\Repository\Fluid->createTableIfNotExists(Object(RedBeanPHP\OODBBean), 'post') #9 /var/www/html/rb.php(9344): RedBeanPHP\Repository\Fluid->storeBean(Object(RedBeanPHP\OODBBean)) #10 /var/www/html/rb.php(10454): RedBeanPHP\Repository->store(Ob in /var/www/html/rb.php on line 1101 ```

Lỗi gây tử vong: PDOException chưa được thực hiện: Không thể kết nối với cơ sở dữ liệu (TestDB). in /var/www/html/rb.php:1101 Stack Trace: #0 /var/www/html/rb.php(798): RedBeanphp \ Driver \ rpdo-> Connect () /rb.php(1171): redbeanphp \ driver \ rpdo-> runquery ('show blay', mảng) #2 /var/www/html/rb.php(1192) Hiển thị bảng ', mảng) #3 /var/www/html/rb.php(4318): redbeanphp \ driver \ rpdo-> getcol (' show blay ', mảng) #4 /var/www/html/rb.php . /html/rb.php(9539): redbeanphp \ queryWriter \ AqueryWriter-> TableExists ('Post') #7 /var/www/html/rb.php(9641) #8 /var/www/html/rb.php(9773): redbeanphp \ repository \ fluid-> createdetableifnotexist (Object (redbeanphp \ oodbbean), 'post') . /rb.php on l ine & nbsp; 1101: Uncaught PDOException: Could not connect to database (testdb). in /var/www/html/rb.php:1101 Stack trace: #0 /var/www/html/rb.php(798): RedBeanPHP\Driver\RPDO->connect() #1 /var/www/html/rb.php(1171): RedBeanPHP\Driver\RPDO->runQuery('show tables', Array) #2 /var/www/html/rb.php(1192): RedBeanPHP\Driver\RPDO->GetAll('show tables', Array) #3 /var/www/html/rb.php(4318): RedBeanPHP\Driver\RPDO->GetCol('show tables', Array) #4 /var/www/html/rb.php(7193): RedBeanPHP\Adapter\DBAdapter->getCol('show tables') #5 /var/www/html/rb.php(6138): RedBeanPHP\QueryWriter\MySQL->getTables() #6 /var/www/html/rb.php(9539): RedBeanPHP\QueryWriter\AQueryWriter->tableExists('post') #7 /var/www/html/rb.php(9641): RedBeanPHP\Repository->tableExists('post') #8 /var/www/html/rb.php(9773): RedBeanPHP\Repository\Fluid->createTableIfNotExists(Object(RedBeanPHP\OODBBean), 'post') #9 /var/www/html/rb.php(9344): RedBeanPHP\Repository\Fluid->storeBean(Object(RedBeanPHP\OODBBean)) #10 /var/www/html/rb.php(10454): RedBeanPHP\Repository->store(Ob in /var/www/html/rb.php on line 1101

Matthew Frederico

unread,

Ngày 5 tháng 2 năm 2021, 10:21:17 AM2/5/212/5/21

đến

R :: setup ('mysql: host = 172.17.0.2_9906; dbname = testDb', 'devuser', 'devPass');_9906;dbname=testdb', 'devuser', 'devpass' );

Nên có ':' trước 9906, ví dụ:

R :: setup ('mysql: host = 172.17.0.2: 9906; dbname = testDb', 'devuser', 'devPass');:9906;dbname=testdb', 'devuser', 'devpass' );


-

Nhiều nắng

unread,

Ngày 8 tháng 2 năm 2021, 5:23:04 PM2/8/212/8/21

đến Redbeanphp

Chào Mattzilla

Đó là một lỗi đánh máy trong bài viết, trong mã của tôi, nó thực sự là một dấu hai chấm. Nó vẫn không hoạt động. & NBSP;

Marios k

unread,

Ngày 9 tháng 2 năm 2021, 5:19:38 AM2/9/212/9/21

đến

R :: setup ('mysql: host = 172.17.0.2_9906; dbname = testDb', 'devuser', 'devPass');

Nên có ':' trước 9906, ví dụ:

R :: setup ('mysql: host = 172.17.0.2: 9906; dbname = testDb', 'devuser', 'devPass');

-

Nhiều nắng

-

Nhiều nắng

Ngày 8 tháng 2 năm 2021, 5:23:04 PM2/8/21

đến Redbeanphp

Chào Mattzilla

Đó là một lỗi đánh máy trong bài viết, trong mã của tôi, nó thực sự là một dấu hai chấm. Nó vẫn không hoạt động. & NBSP;

Marios k


Nhiều nắng

unread,

Ngày 8 tháng 2 năm 2021, 5:23:04 PM2/8/212/9/21

đến Redbeanphp

Chào Mattzilla

Đó là một lỗi đánh máy trong bài viết, trong mã của tôi, nó thực sự là một dấu hai chấm. Nó vẫn không hoạt động. & NBSP;

Marios k

Ngày 9 tháng 2 năm 2021, 5:19:38 AM2/9/21

volumes:

=>Error: 

Vì bạn đang sử dụng Docker-Compose, có lẽ bạn nên sử dụng hệ thống DNS nội bộ thay vì IPS

Hãy thử "Docker Exec -ti {{container_name}} /bin /bash"

Vì bạn đang sử dụng Docker-Compose, có lẽ bạn nên sử dụng hệ thống DNS nội bộ thay vì IPS

Hãy thử "Docker Exec -ti {{container_name}} /bin /bash"

Sau đó, bên trong thùng chứa, bạn sẽ có thể ping các dịch vụ tương ứng với "ping db" hoặc "ping PHP"

---

Bạn cũng có thể sử dụng các biến env từ tác phẩm tổng hợp "getenv ('db_host');"

Ghi chú bên

"Bạn cũng có thể sử dụng các biến env từ tác phẩm tổng hợp" getenv ('db_host'); "=> yeah nhưng nó sẽ chỉ sử dụng những gì tôi đã xác định trong docker-compose.yaml là db_host .. và đó cũng không hoạt động . & nbsp;

Tôi không thể sử dụng ping trong hình ảnh => & nbsp;

Đã thử cài đặt ping:

$ apt-get update apt-get install iputils-ping

$ping 

Đọc danh sách gói ... Tree phụ thuộc công việc & NBSP; & nbsp; & nbsp; & nbsp; đọc thông tin trạng thái ... hoàn thành: không thể xác định vị trí của gói iputils-pingping
Building dependency tree       
Reading state information... Done
E: Unable to locate package iputils-pingping

Đó là một nhiệm vụ đơn giản, nhưng tôi không thể thực hiện nó ... Tôi thậm chí không muốn nghĩ về bước tiếp theo: thực hiện việc chạy này trên Azure. Nhưng trước tiên tôi muốn có thể kiểm tra điều này tại địa phương.


Nhiều nắng

unread,

Ngày 9 tháng 2 năm 2021, 10:06:44 PM2/9/212/9/21

đến Redbeanphp

Chỉ để làm rõ .. tôi đã thay đổi tệp PHP của mình và có thể kết nối với MySQL mà không cần Redbean .. và sau đó tôi đã cố gắng kết nối với cùng một DB với Redbean:

Chỉ để làm rõ .. tôi đã thay đổi tệp PHP của mình và có thể kết nối với MySQL mà không cần Redbean .. và sau đó tôi đã cố gắng kết nối với cùng một DB với Redbean:

yêu cầu 'rb.php';

// PHP đơn giản mà không có redbean

$ host = 'mysql';

$ user = 'root';

$ pass = 'rootpassword';

$ Conn = new mysqli ($ host, $ user, $ pass);

if ($ Conn-> Connect_error) {

chết ("Kết nối không thành công:". $ Conn-> Connect_error);

}

// Làm việc tốt!

// Tạo cơ sở dữ liệu có tên NewDB

$ sql = "Tạo cơ sở dữ liệu newdb";

if ($ Conn-> truy vấn ($ sql) === true) {

echo "cơ sở dữ liệu được tạo thành công với tên NewDB"; // làm việc tốt!

} khác {

echo "Lỗi tạo cơ sở dữ liệu:". $ Conn-> lỗi;

}

// Kết nối đóng

$conn->close();

// Cố gắng kết nối với cùng một cơ sở dữ liệu với Redbean

R :: setup ('mysql: host = mysql; dbname = newdb', 'root', 'rootPassword');

// Lỗi: Lỗi nghiêm trọng: PDOException chưa được thực hiện: Không thể kết nối với cơ sở dữ liệu (NewDB). in /var/www/html/rb.php:1101 Dấu vết Stack: #0 /var/www/html/rb.php(798): RedBeanphp \ Driver \ rpdo-> Connect ()

$ post = r :: phân phối ('post');

$ post-> tiêu đề = 'kỳ nghỉ của tôi';

$ id = r :: store ($ post);

$ post = r :: load ('post', $ id);

print_r($post);

?>

Vấn đề là ở Redbean ở đâu đó ... không có gì để làm với Docker hoặc Docker Compose.


Marios k

unread,

Ngày 9 tháng 2 năm 2021, 10:27:38 PM2/9/212/9/21

đến

Thử kết nối với vani pdo

Mã mẫu


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.

Làm cách nào để kết nối với cơ sở dữ liệu docker mysql?

Dưới đây là các bước bạn có thể làm theo để cài đặt Container MySQL của Dockerhub: Bước 1: Kéo hình ảnh Docker cho MySQL.Bước 2: Triển khai và bắt đầu thùng chứa MySQL.Bước 3: Kết nối với container Docker MySQL.Step 1: Pull the Docker Image for MySQL. Step 2: Deploy and Start the MySQL Container. Step 3: Connect with the Docker MySQL Container.

Tôi có thể chạy PHP trong Docker không?

Nếu bạn mở động cơ DOCKER DEMENTOP, bộ chứa sẽ hoạt động và chạy.Để đảm bảo container được đặt để thực thi các tập lệnh PHP, hãy mở bài đăng cục bộ được xác định của bạn trong trình duyệt, tức là, http: // localhost: 8000/.Điều này cho thấy container được đặt để chạy một số mã điều khiển PHP.. To ensure the container is set to execute the PHP scripts, open your defined local host post in the browser,i.e., http://localhost:8000/ . This shows the container is set to run some PHP-driven code.

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.