我刚接触过Docker,一直在努力弄清楚如何用PHP连接到我的MariaDB容器,但没有成功。
我试图搜索堆栈溢出和谷歌,但找不到任何有用的信息,所以我希望你们可以帮助我。
奇怪的是,当我试图用本地主机、mysql、root和admin连接到MariaDB时,JetBrains DataGrip可以连接到数据库,但不能用PDO连接。
我真的希望你能帮我,谢谢你的时间。
以下是以下项目文件:
这是我的docker-复合. file文件
version: "3.1"
services:
nginx:
image: nginx:alpine
container_name: nginx
volumes:
- ./config/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
ports:
- "80:80"
links:
- php
php:
image: php:7.1-fpm
container_name: php
links:
- mariadb:mysql
volumes:
- ./public:/public
ports:
- "9000:9000"
mariadb:
image: mariadb:10.1
container_name: database
environment:
MYSQL_ROOT_PASSWORD: admin
ports:
- "3306:3306"
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
links:
- mariadb
ports:
- 8183:80
environment:
PMA_HOST: mariadb
PMA_USER: root
PMA_PASSWORD: admin
PMA_ARBITRARY: 1我的nginx.conf文件:
server {
listen 80 default;
client_max_body_size 108M;
access_log /var/log/nginx/application.access.log;
root /public;
index index.php;
if (!-e $request_filename) {
rewrite ^.*$ /index.php last;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log";
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
include fastcgi_params;
}
}还有我的index.php文件
<?php
$servername = "localhost";
$username = "root";
$password = "admin";
$database = "mysql";
try {
$conn = new PDO("sqlite:host=".$servername.";dbname=" . $database, $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = $conn->prepare("SELECT * FROM testDB");
$sql->execute();
while($result = $sql->fetch(PDO::FETCH_ASSOC)){
$result['myTestData'];
}
}
catch(PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
?>发布于 2017-10-01 12:56:26
这是因为您正试图从您的php容器中访问具有主机名localhost的数据库服务器,这将解析为php容器本身(与127.0.0.1相同)。
您应该将$servername变量更改为等于撰写文件中的mariadb服务名称,例如"mariadb"。
在您的示例中,位于单个默认网络中的每个容器都由其服务名称(以及其他一些内容)来解决,这就是为什么您不需要链接,因为这些链接有些不受欢迎。
另外(以防万一),确保您的db容器实际启动并准备好接收连接。第一次开始需要一段时间。
发布于 2017-10-01 01:48:28
尝试创建自己的Dockerfile来安装mysql。把它放在一边,船坞组成了yml:
FROM php:7.1-fpm
RUN docker-php-ext-install pdo pdo_mysqldocker-compose.yml:
php:
build: .
container_name: php
links:
- mariadb:mysql
volumes:
- ./public:/public
ports:
- "9000:9000"https://stackoverflow.com/questions/46508038
复制相似问题