centos 使用 systemctl 使 docker 容器(container)开机启动

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/technofiend/article/details/70289962

docker 提供了简单的操作容器的命令。但是他操作容器的命令不属于系统。

由于太简单,必然有很多不足。例如 启动顺序、依赖性检查、失败服务恢复等,均需要一个成熟的系统服务管理软件来完成。

本文使用redis作为例子:
第一步:下载镜像

# docker pull docker.io/redis

第二步:启动镜像

# docker run -d --name redis_server -p 6379:6379 redis

第三步:进入/etc/systemd/system/目录并创建docker-container\@.service文件

#cd /etc/systemd/system/
#vi /etc/systemd/system/docker-container\@.service

注意:不要以为docker-container\@.service缺少了什么,他的名字就叫这个。

将一下内容复制进去

[Unit]
Description=Docker Container %I
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStart=/usr/bin/docker start -a %i
ExecStop=/usr/bin/docker stop -t 2 %i

[Install]
WantedBy=default.target

第四步:设置开机启动(注意:开机先启动docker才能再启动容器)

# systemctl enable docker.service
# systemctl enable docker-container\@redis.service

第五步:检查是否能正常启动

# systemctl start docker-container\@redis.service
# systemctl status docker-container\@redis.service

第四第五步 调用的docker-container\@redis.service服务,实际上是docker-container\@.service 服务。redis替换了第三步内容的 %i
最后重启试试。


以下方法仅用于未启动的容器

要是需要在容器中加入环境变量的话, 就必须使用docker run 而不是docker start了,请参考一下内容。
特别注意:
1、使用 systemctl stop docker-container\@redis_server.service 是会删除容器的,删除了容器的内容就没有了。
2、docker run的地方不能加-d,加了-d就是分离模式了。

vi /etc/systemd/system/docker-container\@redis_server.service

[Service]
ExecStart=
ExecStart=/usr/bin/docker run --env foo=bar --name %i redis
ExecStopPost=/usr/bin/docker rm -f %i

猜你喜欢

转载自blog.csdn.net/technofiend/article/details/70289962
今日推荐