Skip to content

Docker容器启动后自运行脚本的配置 #13

@johnnian

Description

@johnnian

使用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<johnnian@126.com>

RUN <填写构建Docker时需要运行的命令>

ENV  MYENV /XX/XX

CMD <容器每次启动时运行的命令, 只能有一个CMD>

编写完后,运行:

docker build -t 镜像名:标签 <Dockerfile所在的目录>
# docker build -t centos:johnnian .

docker run -itd 新镜像名

附:参考现成的Dockerfile,如mysql的Dockerfile

参考链接

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions