当安装镜像后本地无法链接
当安装镜像后 出现 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
命令时要谨慎,确保你知道自己在做什么,并且只结束你所了解的进程。