Docker容器操作指南:执行命令与设置开机自启
一、连接并操作正在运行的Docker容器
1. 查看容器信息
直接获取需操作的容器ID或名称(无需额外权限):
docker ps
命令会列出所有运行中容器,重点关注两列信息:
列名 | 示例值 |
---|---|
CONTAINER ID | 212cfc09b7ed |
NAMES | 1Panel-php7-3T4d |
2. 连接到容器
通过docker exec
以交互式方式进入容器,方便后续操作:
docker exec -it <容器ID或名称> /bin/sh
- 说明:
-it
确保交互式连接(可输入命令);<容器ID或名称>
替换为实际标识(如212cfc09b7ed
或1Panel-php7-3T4d
);/bin/sh
为容器默认shell(部分容器需用/bin/bash
)。
二、在容器中执行PHP任务(以彩虹聚合DNS为例)
1. 方法一:通过脚本执行(适合需延迟/复杂逻辑)
在宿主机目标目录创建脚本文件(如
dns.sh
):vi /www/sites/dns/index/dns.sh
写入脚本内容(延迟20秒确保数据库启动,无需可删除):
sleep 20 # 适配彩虹聚合DNS依赖的数据库启动时间 cd /www/sites/dns/index/ && php think dmtask
给脚本添加执行权限:
chmod +x /www/sites/dns/index/dns.sh
让容器执行脚本:
docker exec -it <容器ID或名称> /bin/sh /www/sites/dns/index/dns.sh
2. 方法二:直接执行PHP命令(简化操作)
无需创建脚本,直接在容器内运行PHP任务,支持后台执行:
docker exec <容器ID或名称> sh -c "php /www/sites/dns/index/think dmtask"
- 优势:省略脚本步骤,
docker
会自动后台运行,退出终端不影响任务执行。
三、设置开机自启动(用cron @reboot 实现)
通过cron
的@reboot
选项,让系统重启后自动执行容器内的PHP任务,比rc.local
更灵活稳定。
1. 编辑当前用户的crontab配置
执行以下命令打开crontab编辑界面:
crontab -e
- 首次编辑会提示选择编辑器(如
nano
或vi
),按提示选择常用编辑器即可(如输入2
选择vi
)。
2. 添加开机自启任务
在crontab文件末尾添加以下内容(根据实际场景选择命令):
场景1:直接执行PHP命令(推荐)
@reboot sleep 20; docker exec <容器ID或名称> sh -c "php /www/sites/dns/index/think dmtask"
示例(用容器名称
1Panel-php7-3T4d
,更稳定):@reboot sleep 20; docker exec 1Panel-php7-3T4d sh -c "php /www/sites/dns/index/think dmtask"
场景2:执行脚本文件
若用之前创建的dns.sh
脚本,可添加:
@reboot docker exec <容器ID或名称> /bin/sh /www/sites/dns/index/dns.sh
- 说明:若脚本内已包含
sleep 20
,此处无需重复添加延迟。
3. 保存并退出crontab
- 若用
vi
编辑器:按Esc
,输入:wq
回车保存退出; - 若用
nano
编辑器:按Ctrl+O
回车保存,再按Ctrl+X
退出。
4. 验证crontab配置
执行以下命令查看当前用户的crontab任务,确认配置已生效:
crontab -l
若输出中包含刚才添加的@reboot
任务,说明配置成功。
四、注意事项
- 容器标识选择:优先用容器名称(如
1Panel-php7-3T4d
),而非容器ID——容器重建后ID会变化,名称通常不变,避免频繁修改配置。 - 延迟时间调整:
sleep 20
(20秒)需根据实际环境调整,确保系统重启后,docker
服务、容器及依赖的数据库完全启动后,再执行PHP任务(可根据实际启动速度改为30
或40
秒)。 - 权限问题:若执行
docker
命令提示权限不足,需确认当前用户已加入docker
用户组(可联系管理员执行usermod -aG docker 用户名
添加,添加后需重新登录生效)。 - 日志排查:若开机后任务未执行,可查看
cron
日志排查问题(Debian/Ubuntu系统日志路径:/var/log/syslog
,搜索关键词CRON
;CentOS系统日志路径:/var/log/cron
)。
评论区(暂无评论)