Docker 拉取官方基于Debain的镜像使用dockerfile构建nginx+php+mysql+redis 踩坑记

以后要抛弃手动编译lnmp了,直接用docker 写好Dockerfile 和docker-compose.yml 分分钟部署好环境。

问题背景:

拉取官方php镜像,写好了dockerfile,替换了镜像内的php.ini 以及php-fpm.conf配置文件

问题:

1.php容器启动以后立刻就停止了,状态总是exited(0) 。

检查 php-fpm.conf 将 daemon 设置为 no  如果daemon为yes ,表示php-fpm为后台进程,容器在没有前台进程的情况下会关闭。

2.启动php容器失败,状态是exited(x) (x代表某一个数字)

docker logs 容器ID   查看该容器的日志,有错误都会显示。

3. 如果遇到的问题解决不了,想一想自己更改了哪些设置,然后分步构建容器。

比如,我更改了php.ini 更改了php-fpm.conf,最后不能运行,现在分步,第一步 dockerfile里面只更改php.ini 其他的还是镜像默认的配置,然后构建容器,发现可以正常启动,保持容器持续运行;

然后我再次构建容器,dockerfile里面更改了php.ini 和php-fpm (扩展什么的都没问题,安装扩展的时候有问题会直接终止进程的),这个时候运行新的容器发现无法维持容器运行状态,然后百度半天,发现问题。

之前一直是下载tar.gz的包,手动编译搭建lnmp环境,所以配置文件还是用的之前的,但是docker容器的运行模式不一样,一个容器一个进程,没有前台进程的情况下,容器就会停止,所以php-fpm不能使用守护进行的方式 在后台运行,于是把dameon=yes 改为 dameon =no。然后重新构建容器,运行正常。

问题背景:

1.mysql容器的日志目录映射宿主机总是报错 没有权限。

解决方法: 把宿主机对应的日志目录权限改为 777 , mysql容器内 error.log 权限是 mysql:adm   slow.log权限是 mysql:mysql ,

不想分开放,最后就只能将宿主机日志目录权限 777了

(个人习惯 把日志,以及可能需要修改的配置文件 映射到宿主机, 日志大可不必映射,本身docker logs就可以查看日志)

2.php容器连接不上mysql 提示connect refused

解决方法: php连接mysql主机的ip地址不对,我用的link 所以不需要用127.0.0.1 也不需要用mysql容器的ip地址  直接用link mysql容器的别名就好  (php 容器启动的时候  --link mysql   那么 连接mysql 的主机ip就写mysql就好了 例如:'host'    => 'mysql:3306'  容器内会把mysql解析成mysql容器的地址)

2019年1月9日   nginx+php+mysql+redis 环境搭建完成,用了docker,感觉跟直接手动编译lnmp环境最大的区别还是 部署时间,正常编译mysql需要一个多小时,docker 写好dockerfile,docker-compose.yml 几分钟就搞定了,而且更加灵活,容灾性更好,隔离性更好。

发布了87 篇原创文章 · 获赞 58 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/benpaodelulu_guajian/article/details/85725456