mariadb 连接 php,php-从Docker容器使用localhost连接到MariaDB

博主在使用phpdocker.io生成的docker-compose.yml文件搭建环境时遇到问题。他们正在开发一个需要与数据库直接交互的应用,该应用会创建/删除用户权限,并允许远程有限权限访问。环境包括Ubuntu 18.10、Docker 18.09.3和docker-compose 1.21.0。尝试使用`network_mode: host`导致Web服务器无法启动。目前使用的数据库服务为MariaDB 10.4。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,我确实阅读了那些链接

但是作为docker的初学者.它没有帮助我.

您需要了解的内容:

>是的,我需要本地主机.我正在开发一个可以交互的应用程序

直接与数据库.它创建/删除用户权限,并

允许某些用户从远程以有限的权限访问

访问.初始化后,该应用程序将放弃对root和伪造用户的默认远程访问,并授予他们对localhost的完全特权.

>我正在使用https://phpdocker.io生成的docker-compose.yml

> Ubuntu 18.10

> Docker版本18.09.3,内部版本774a1f4

> docker-compose版本1.21.0,版本未知

>我仅将docker用于开发目的.在生产中,我使用forge

./docker-compose.yml

###############################################################################

# Generated on phpdocker.io #

###############################################################################

version: "3.1"

services:

mailhog:

image: mailhog/mailhog:latest

container_name: myapp-mailhog

ports:

- "8081:8025"

redis:

image: redis:alpine

container_name: myapp-redis

mariadb:

image: mariadb:10.4

container_name: myapp-mariadb

working_dir: /application

volumes:

- .:/application

environment:

- MYSQL_ROOT_PASSWORD=root

- MYSQL_DATABASE=myapp

- MYSQL_USER=forge

- MYSQL_PASSWORD=forge

ports:

- "8083:3306"

webserver:

image: nginx:alpine

container_name: myapp-webserver

working_dir: /application

volumes:

- .:/application

- ./phpdocker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf

ports:

- "8080:80"

php-fpm:

build: phpdocker/php-fpm

container_name: myapp-php-fpm

working_dir: /application

volumes:

- .:/application

- ./phpdocker/php-fpm/php-ini-overrides.ini:/etc/php/7.3/fpm/conf.d/99-overrides.ini

./phpdocker/nginx/nginx.conf

server {

listen 80 default;

client_max_body_size 108M;

access_log /var/log/nginx/application.access.log;

root /application/public;

index index.php;

if (!-e $request_filename) {

rewrite ^.*$/index.php last;

}

location ~ \.php${

fastcgi_pass php-fpm: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;

}

}

./phpdocker/php-fpm/Dockerfile(稍作修改以添加mysql_client而不在第二个RUN命令中安装git)

FROM phpdockerio/php73-fpm:latest

WORKDIR "/application"

# Fix debconf warnings upon build

ARG DEBIAN_FRONTEND=noninteractive

# Install selected extensions and other stuff

RUN apt-get update \

&& apt-get -y --no-install-recommends install \

php7.3-mysql php-redis php7.3-sqlite3 php-xdebug php7.3-bcmath php7.3-bz2 php7.3-gd \

git \

mysql-client \

&& apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*

./php-ini-overrides.ini

upload_max_filesize = 100M

post_max_size = 108M

我尝试使用network_mode:host,但它使Web服务器停止在1号出口处

### 如何在Docker中安装和配置MariaDB #### 准备工作 为了能够在环境中顺利运行Docker中的MariaDB,需先确认已正确安装Docker环境。对于CentOS系统而言,可以通过命令`yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin`完成Docker及其相关组件的安装[^2]。 #### 获取MariaDB镜像 通过拉取官方仓库中的MariaDB镜像来准备部署所需的资源。具体操作为执行命令`docker pull mariadb`以获取最新版本的MariaDB镜像文件[^1]。 #### 创建持久化存储卷 考虑到数据库的数据安全性和稳定性,建议设置专门用于保存MariaDB数据的永久存储位置。这一步骤可通过定义挂载点实现,例如指定本地路径映射至容器内部的数据目录,从而保障即使容器被删除也不会丢失重要信息。 #### 配置启动参数与初始化脚本 编写必要的Shell脚本来辅助自动化部署过程是非常有益的做法。比如可以创建名为`db_init.sh`以及`run.sh`这样的脚本文件放置于自定义构建上下文中(如`/root/my-dockerfile/`)。其中前者负责处理首次启动时的一些特定任务;后者则用来简化后续每次重启服务的操作流程[^3]。 #### 处理权限认证问题 当遇到访问控制错误提示“Access denied for user 'root'@'localhost'(using password:YES)”时,一种常见的解决方案是在MySQL/MariaDB配置文件内加入`skip-grant-tables`选项暂时绕过密码验证机制以便重设管理员账户凭证。不过需要注意的是,在生产环境下不推荐长期开启此模式以免带来安全隐患。进入容器后编辑相应的配置文件(`my.cnf`)并添加该条目可有效解决问题[^5]。 ```bash # 进入容器 docker exec -it mariadb bash # 更新软件包列表 apt-get update # 安装vim工具 apt-get install vim # 编辑配置文件 cd /etc/mysql/ vim my.cnf ``` #### 总结 综上所述,在Docker中成功搭建并管理MariaDB实例涉及多个环节的工作,从基础环境建设到高级特性应用都需要谨慎对待。遵循上述指导能够帮助顺利完成整个过程,并确保所建立的服务稳定可靠。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值