如果你的 Docker 容器依赖远程存储(如 NFS 共享目录),而服务器开机时 挂载顺序晚于 Docker 启动,容器就会无法访问挂载点,频繁报错,甚至导致整个服务无法运行。 本文通过一个实际案例,手把手实现:CentOS 上自动挂载远程存储,并在挂载完成后再启动 Docker,并讲清楚 systemd 配置路径、Docker 配置两种修改方式,避免升级风险。
假设我们想把远程存储挂载到 /data
,在 /etc/fstab
中写了:
storage.example.com:/share /data nfs defaults,_netdev 0 0
重启后发现:
mount.nfs: Failed to resolve server … Name or service not known
/data
;systemctl start data.mount
却能正常挂载。启动时,systemd
只保证网络接口启动 (network.target
),但:
有人会:
rc.local
或脚本里手动延迟挂载;restart: always
,依赖自动重启。这些办法可能短期有效,但风险很大:
.mount
管理挂载创建 /etc/systemd/system/data.mount
:
[Unit]
Description=Mount remote storage before Docker
Requires=network-online.target nss-lookup.target NetworkManager-wait-online.service
After=network-online.target nss-lookup.target NetworkManager-wait-online.service
Before=docker.service
[Mount]
What=storage.example.com:/share
Where=/data
Type=nfs
Options=_netdev,auto,timeo=500,retrans=86400,hard,bg,intr
[Install]
WantedBy=multi-user.target
关键点:
NetworkManager-wait-online.service
:等待网络和 DNS 就绪;Before=docker.service
:挂载必须先于 Docker;_netdev
:让 systemd 知道这是网络设备挂载。不建议直接修改 /usr/lib/systemd/system/docker.service
,因为它里面已经有其他依赖,直接替换会破坏服务启动逻辑。
推荐方法:使用 override 文件,仅追加挂载依赖:
mkdir -p /etc/systemd/system/docker.service.d
vim /etc/systemd/system/docker.service.d/override.conf
添加以下内容:
[Unit]
# 仅追加 data.mount,不覆盖原有依赖
Requires=data.mount
After=data.mount
然后重新加载,验证修改是否正确:
systemctl daemon-reload
systemctl show docker.service | grep -E 'Requires|After'
你会看到原本的依赖(如 containerd.service
、network-online.target
)仍然存在,并额外加上了 data.mount
。
重启docker服务
systemctl restart docker
这样,docker.service
启动时既会依赖它原本的 containerd.service
、network-online.target
,也会等待 data.mount
完成后再启动。
如果你真的要直接改 /usr/lib/systemd/system/docker.service
,必须小心:
Requires=
和 After=
,把 data.mount
加进去,而不是覆盖;systemctl enable NetworkManager-wait-online.service
systemctl enable data.mount
systemctl daemon-reload
systemctl restart docker
reboot
检查状态:
systemctl status data.mount
systemctl status docker
挂载和 Docker 都会在启动时自动就绪,容器可直接访问 /data
。
理解这三个目录,才能知道配置应该改哪里。
/usr/lib/systemd/system/
/run/systemd/system/
/lib/systemd/system/
/usr/lib/systemd/system
相同。/usr/lib/systemd/system
的符号链接。/etc/systemd/system/
override.conf
可以覆盖系统服务而不修改原文件。优先级顺序:
/etc/systemd/system/ > /run/systemd/system/ > /usr/lib/systemd/system/ (/lib/systemd/system/)
查看最终生效配置:
systemctl cat docker.service
/etc/systemd/system/data.mount
(使用时替换实际地址);这样,每次服务器重启时:
/data
;怀孕去医院检查挂什么科 | 备孕需要补充什么 | 水可以做什么 | 肌肉痉挛吃什么药 | 蔗去掉草字头读什么 |
pf是什么意思 | 左后背疼什么原因 | 揾什么意思 | 十二月份的是什么星座 | 2017年属什么 |
1月16日什么星座 | 十年婚姻是什么婚 | 中暑喝什么好 | 什么带不能系 | 因公殉职是什么意思 |
孕酮低吃什么可以补 | 白喉是什么病 | 胃息肉有什么症状 | 斑是什么原因造成的 | 膀胱壁增厚毛糙是什么意思 |
为什么吃火龙果会拉肚子hcv8jop4ns3r.cn | 湖北人喜欢吃什么菜hcv8jop4ns0r.cn | 脑梗是什么引起的hcv8jop3ns1r.cn | cbp是什么意思hcv8jop9ns9r.cn | 小叶紫檀有什么功效hcv8jop2ns4r.cn |
亭亭净植是什么意思hcv9jop1ns1r.cn | 软包是什么意思hcv9jop4ns3r.cn | 鱼油吃多了有什么副作用wuhaiwuya.com | 做牛排需要什么调料hcv8jop8ns1r.cn | 父亲b型血母亲o型血孩子什么血型hcv8jop7ns2r.cn |
攀龙附凤是什么生肖hcv8jop9ns4r.cn | 流鼻涕感冒吃什么药hcv9jop5ns9r.cn | 血压低有什么危害hcv8jop9ns2r.cn | 一片哗然是什么意思hcv8jop8ns3r.cn | 哺乳期乳腺炎吃什么药hcv8jop6ns8r.cn |
骨折不能吃什么hcv8jop6ns8r.cn | 乙肝五项135阳性是什么意思hcv8jop1ns0r.cn | boq是什么意思hcv9jop6ns6r.cn | 北方是什么生肖hcv7jop9ns3r.cn | fs是什么单位hcv9jop3ns8r.cn |