当安装镜像后本地无法链接
当安装镜像后 出现 mysql 链接不上 redis链接不上
主要是容器内访问 mysql 不属于本地 要用 本地ip 地址
原因:docker运行的每个容器都是隔离的,redis默认不允许外部连接,因此想要部署在docker容器内的应用连接上redis,需要修改redis默认配置,配置文件运行redis即可。
windows docker 打开又关闭
是 Hyper-V 是微软开发的虚拟机,未开启导致,阅读该 文章 安步骤处理
docker-compose命令不存在怎么办
解决方法:
- fedora系统内利用“- dnf install docker-compose”命令安装“- docker-compose”即可;
- “CentOS 7/RHEL7”系统内利用“yum install docker-compose”命令安装即可;
- debian及其变种如- Ubuntu系统内利用“- apt-get install docker-compose”命令安装即可。
如果把 host 写成 IP 地址,
$host=’172.17.0.2’;
会报错
| 1 | Error!: SQLSTATE[HY000] [2002] No route to host | 
应该写成mysql容器的名称,
例如
$host=’lnmp_mysql’;
这里有个前提:
- 需要你的mysql容器和php容器在同一个docker网络,
- 或者使用 —link 指定。
容器的时间与服务器不一致的修复方法
主要是docker默认使用的是美国时区,之行以下代码获取当前时区。
| 1 | php -info | grep timezone | 
所以要进行调整,进入php容器内之行
| 1 | printf '[PHP]\ndate.timezone = Asia/Shanghai\n' > /usr/local/etc/php/conf.d/tzone.ini | 
或者在dockerFile中添加以下命令,重新构建镜像
| 1 | RUN printf '[PHP]\ndate.timezone = Asia/Shanghai\n' > /usr/local/etc/php/conf.d/tzone.ini | 
再查看,时区正常了
您可以使用以下命令将宿主机的时间同步到运行中的容器中,并将时区设置为北京时间:
| 1 | docker exec -it <container_name> ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && date -s "$(date +%Y-%m-%d\ %H:%M:%S)" | 
请将 <container_name> 替换为您要同步时间的容器的名称。执行此命令后,容器的时间将与宿主机的时间同步,并且时区将设置为中国标准时间(北京时间)。
容器内运行 PHP 时,time() 函数返回的时间戳取决于容器内
在 Docker 容器内运行 PHP 时,time() 函数返回的时间戳取决于容器内 PHP 解释器的系统时区设置。如果该容器的系统时区设置为美国时区,则 time() 函数返回的时间戳也将基于该时区。
要更改容器内 PHP 的系统时区设置,可以在 Dockerfile 中使用 ENV 命令设置 TZ 环境变量,例如:
| 1 | FROM php:7.4-fpm | 
这将设置容器的系统时区为美国东部时区(New York)并在构建镜像时生效。您也可以在创建容器时使用 -e 参数来设置 TZ 环境变量,例如:
| 1 | docker run -e TZ=America/New_York my-php-app | 
请注意,您应该选择与您所在地区相同或最相关的时区设置,以确保正确的时间戳。
启动不了容器
但是执行后仍旧没有重启,大概率是重启的时候报错了,查看日志:
| 1 | sudo docker logs -f 容器名称 | 
在日志里有容器启动不了的问题。
容器间不互通
容器都没有在网络中,想要互通就要以访问容器内的ip 进行访问。
如果在有容器在网络中,如果想要互通就比也加入网络中
| 1 | docker network connect my-network container1 | 
返回 docker 系列
docker部署thinkphp之验证码问题 Call to undefined function Think\imagettftext();
gd库中没有freeType会产生这个问题,则按照以下步骤进行:
docker-php-ext-configure gd –with-freetype –with-jpeg –with-webp
重新编译:
docker-php-ext-install gd
安装完成后重启php 容器即可解决该问题
docker容器间启动有时会启动不了
一般都是端口冲突导致,有时面板docker显示已停用了容器,其实有时端口还是没被杀死,所以要手动杀死端口
windows查看端口占用,杀掉进程
- 首先启动cmd命令窗口 【windows+R】
- 在命令窗口中输入“netstat -ano”命令,回车,就可看到系统当前所有端口的占用情况;或者输入“netstat -ano |findstr "端口号"”命令,回车,就可以看到指定端口的占用情况。
比如:netstat -ano|findstr "" , 其中3306 是要查找的端口
- 输入 tasklist|findstr “4876”, 通过PID查询出进程。 
- 输入 - taskkill /f /t /im mysqld.exe或者 :- taskkill /PID 53176 -T -F(其中-T是包括了子进程,-F是强制), 通过结束该进程。
Mac 上查看端口占用情况并结束进程的方法
步骤1:打开终端应用
在 Launchpad 或者应用程序文件夹中找到终端应用,双击打开。
步骤2:查看端口占用情况
在终端中输入以下命令来查看当前系统中所有的端口占用情况:
sudo lsof -i :<端口号>
将 <端口号> 替换为你要查询的端口号。例如,如果你想查看端口 80 的占用情况,命令应该是:
sudo lsof -i :80
按下回车键后,系统会列出所有正在使用该端口的进程信息,包括进程名称、进程 ID 等。
步骤3:结束进程
如果你确定要结束某个进程以释放端口,可以使用以下命令:
sudo kill -9 <进程ID>
将 <进程ID> 替换为你要结束的进程的实际 ID;加-9为强制杀死进程。例如,如果你要结束进程 ID 12345,命令应该是:
sudo kill -9 12345
请确保你确实想要结束该进程,因为这个操作是不可逆的。
步骤4:输入管理员密码
在终端中输入以上的结束进程命令后,系统会要求你输入管理员密码。输入密码时,终端中不会显示任何字符,但你可以正常输入。输入密码后按下回车键。
步骤5:验证进程是否结束
结束进程后,你可以再次运行步骤2的命令来验证进程是否已经结束。
通过以上步骤,你可以在 Mac 上查看特定端口的占用情况,并且结束相关的进程以释放端口。请注意,在使用 sudo 命令时要谨慎,确保你知道自己在做什么,并且只结束你所了解的进程。





