我正在使用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
答案 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操作。