如何在容器刚刚运行后执行脚本

时间:2016-10-18 19:29:29

标签: apache docker

我正在使用apache的docker容器。 我必须在容器启动后执行脚本。 我怎么能这样做?

首先,我有一个dockerfile:

FROM:ubunty:trusty
... necessary installs

ADD test.sh /my-folder/    

EXPOSE 80
EXPOSE 443

CMD ["/run.sh"]

run.sh我作为最后一个命令执行:exec apache2 -D FOREGROUND,这是有效的。 现在我希望在容器启动后执行一个额外的脚本test.sh

详细说明,我想要的是,在启动apache容器(这可行)之后,还要执行一个额外的脚本。该脚本必须连接到我的服务器的端口80(该端口已在运行命令中映射)。

CONTAINER ID        IMAGE                COMMAND             CREATED             STATUS              PORTS                                      NAMES
61c66c17d5f1        my-apache            "/run.sh"           28 minutes ago      Up 28 minutes       0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   suspicious_shockley

2 个答案:

答案 0 :(得分:0)

如果要手动运行脚本,请使用:

docker exec 61c66c17d5f1 /myfolder/test.sh 

如果您希望在apache开始后自动执行脚本,请修改run.sh:

exec apache2 &
sleep 2
/myfolder/test.sh
wait

此致

答案 1 :(得分:0)

实现此目的的另一种方法 - 为您的应用程序创建单独的容器。它还将继承您可信赖的形象,但其他任何东西都没有。它会执行你所有的东西,并以零代码退出。在这种情况下,您不会触摸您的Apache服务。您应该将此容器映射到数据卷,如下所示:

app:
    build: ./app/
    depends_on:
      - apache
    volumes:
      - /path/to/app:/var/www/html

正如你所说,你希望你的脚本在apache启动后执行。你可以简单地添加字段depends_on告诉docker_compose在apache服务之后启动它。但为此你应该使用泊坞符表示法V2。

顺便说一下 - 在你的情况下,你需要启动apache服务来连接你的脚本。您应该将depends_on替换为links - 它会将apache IP添加到应用容器主机文件中,因此您可以使用apache主机名对其进行ping操作。