Blog
Blog copied to clipboard
Docker容器启动后自运行脚本的配置
使用Docker 的Centos镜像(官方版本),发现 Docker在启动的时候,不会运行 /etc/rc.d/rc.local 脚本。
原因是:
Docker 的上的操作系统镜像没有 init system,而普通的虚拟机有,因为带有完整的系统,在操作系统启动的过程中,会执行 boot 的所有初始化操作,但 Docker 则不是, Docker 只运行我们设置需要启动运行的脚本,否则不会自己运行。
如果需要Docker在启动后就自动运行 /etc/rc.d/rc.local,有下面的两种方式:
方法一:通过Docker命令
docker run image /bin/bash -c "/etc/rc.d/rc.local; <your command>"
eg.
docker run -itd myimage:test /bin/bash -c "/etc/rc.d/rc.local;/bin/bash"
方法二:通过DockerFile重新构建镜像,指定启动运行的服务
Dockerfile 示例如下:
FROM centos
MAINTAINER Johnnian<[email protected]>
RUN <填写构建Docker时需要运行的命令>
ENV MYENV /XX/XX
CMD <容器每次启动时运行的命令, 只能有一个CMD>
编写完后,运行:
docker build -t 镜像名:标签 <Dockerfile所在的目录>
# docker build -t centos:johnnian .
docker run -itd 新镜像名
附:参考现成的Dockerfile,如mysql的Dockerfile
参考链接
你好,请问一下: 1、在dockerfile的最后的 CMD 环节如果加了运行的脚本,那么在docker run的方式还可以执行脚本吗? 如果能执行脚本可以实现那种传递参数化的执行脚本吗? 2、这种在启动的时候进行脚本执行的方式是否也支持docker swarm?