laradock, docker, mysql, php

在新买的mac上折腾了很久php环境,最后觉得简直就是zz,记录一下中途的各种正解和分支情况的解法。

开始是想在docker上搭建一个php测试环境,然后直接找到了laradock这个东西,然后就一路踩坑,权当学习了一下一直想学的docker。

因为是只想搭建一个测试环境,所以没有用现有的框架,laradock的用法在官方文档里还算清晰,这里整理一些坑点和基本的docker用法。

docker

mac下貌似没有docker-machine的概念?

docker run -p 2333:3306 容器Id    开启一个镜像,把容器的3306端口映射到主机2333

docker ps -a    查看当前的容器

docker commit 容器id    打包成镜像

docker images    查看镜像

docker exec    容器id bash

docker attach    容器id

docker rm $(docker ps -a -q) -f    删除所有容器

docker rmi    容器id 删除镜像

laradock

.env里可以更改php version,第一次更改没改成功,很迷

然后重点:php里用mysqli连接的时候一直显示connection refuse,什么方法都不管用。。。很僵硬。

中间一些分支:

在终端中进入mysql报错:can’t connect to local mysql sercer throgh socket ‘/tmp/mysql.sock’:

这个问题很多人的解决方法不同,但是我最后都没有用。。。laradock的配置文件很迷,附上其中一些解决方法:

mysql在服务开启的时候会产生一个mysql.sock的临时文件,这个文件可能存在于/var/lib或者/var/mysql或者/tmp中,可以用ln -s 来软连接到报错的地方。

类似

直接开启服务使得mysql.sock出现:mysql.server start,但是这样就会开启宿主机的mysql服务,使得不能从终端直接进入docker的mysql。

直接用:

这个方法可以在宿主机mysql服务关闭的情况下进入docker的mysql,最后也是用这个方法来从终端中进入mysql。

关于php里mysqli_connect:

最后发现,自己写的页面要用mysql连接的时候要

!!重点是mysql,实际上文档中提到了一点就是在laravel配置中DB_HOST=mysql,所以在连接mysql的时候要用这种方法。

未解之谜:更改了php.ini中的display_errors为on后在phpinfo中还是显示为off,也找不到php-fpm的配置文件,很蠢。、。、。

找到原因了,在php-fpm里有一个laravel.ini里定义了display_errors=Off,这个文件是动态add进php.ini的,要吧这里改成On然后

就可以改了。