Docker PHP 例子
发布时间:2021-07-17, 15:13:45 分类:Linux | 编辑 off 网址 | 辅助
图集1/1
正文 844字数 490,932阅读
创建项目目录
我们会把这个项目的相关文件,集中放到一个目录
demophp
Run code
Cut to clipboard
创建一个Dockerfile,其中包含了Docker的指令。在demophp目录下创建
Dockerfile
Run code
Cut to clipboard
Dockerfile
FROM php:7.3
COPY . /var/www/php
WORKDIR /var/www/php
CMD ["php", "./demo.php"]
Run code
Cut to clipboard
所有指令都大写,这是惯例
现在demophp目录下有2个文件:
Dockerfile
demo.php
<?php
//demo.php
echo "This is php app - lizhenqiu.com"
Run code
Cut to clipboard
构建 Docker 镜像
切换到demophp目录,运行
docker build -t demophp .
Run code
Cut to clipboard
构建Docker镜像。Docker镜像可以任意取名,此处命名为demophp
最后使用
docker images
Run code
Cut to clipboard
运行 Docker 镜像
执行
docker run demophp
Run code
Cut to clipboard
[root@demophp docker-php]# docker run demophp
This is php app - lizhenqiu.com
[root@demophp docker-php]#
Run code
Cut to clipboard
可以看到,demophp镜像成功运行,输出了一条信息。
(支付宝)给作者钱财以资鼓励 (微信)→
有过 4 条评论 »
进入数据库内部
mysql -u root -p book
查看当前字符集
show variables like '%character%';
解决方法:
修改my.ini配置文件
my.ini中查找sql-mode
我的MySQL版本为Server version: 5.6.47 MySQL Community Server (GPL)
默认为:sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
将STRICT_TRANS_TABLES,删掉保存重启mysql
如果版本高的话默认可能是:
sql_mode="STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE,NO_AUTO_CREATE_USER
将NO_ZERO_DATE,NO_ZERO_IN_DATE,删掉保存重启mysql即可
mysql 报错[Err] [Dtf] 1292 - Incorrect datetime value: '0000-00-00 00:00:00' for column 'uploadtime' at row 9 With statement:......
搜索之后发现原来是因为 msyql5.7 及以上不允许时间戳字段插入 ‘0000-00-00’ 数据,
修复方法也比较简单,去掉sql_model 中的 NO_ZERO_DATE 配置即可
查看可以执行SQL
select @@global.sql_mode;
修改方法有好几个,
最简单的就是执行SQL
set @@global.sql_mode = 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
还有一个修改配置文件
vim /etc/my.cf //添加这条数据 sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
保存退出后重启mysql
set @@GLOBAL.sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION;
需修改mysql配置文件,
通过手动添加sql_mode的方式强制指定不需要ONLY_FULL_GROUP_BY属性,
my.cnf位于etc文件夹下,vim下光标移到最后,添加如下:
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
重启mysql服务
SQLSTATE[HY000] [2002] Connection refused
使用docker搭建lnmp环境,使用的是分容器的搭建方案
框架使用thinkphp,想要连接数据MySQL,一直显示“SQLSTATE[HY000] [2002] Connection refused”
数据库配置host填的是localhost,后面改成了127.0.0.1,都是连接不了
还以为是数据库用户权限问题,
新建了一个用户,刷新了权限,结果还是不行
想了好久,原来都是分容器的问题,
由于采用了分容器的搭建方案,
在php的容器内连接127.0.0.1或者localhost,肯定是连接不了数据库MySQL的
应该把数据库配置host填成MySQL容器名称,
我本地的MySQL容器名称为mysql,
改成这样就可以连接
<?php return [ // 数据库类型 'type' => 'mysql', // 服务器地址 'hostname' => 'mysql', // 数据库名 'database' => 'jxt', // 用户名 'username' => 'root', // 密码 'password' => '123456', // 端口 'hostport' => '3306',
将 C:\Users\Administrator\AppData\Roaming 目录下Docker目录改名为Docker_backup(实际上就是删除并备份),
启动 Docker for windows.exe,提示docker没有启动,
点击启动docker一切恢复如初,原来的容器和镜像都在。