【发布时间】:2019-01-09 09:12:44
【问题描述】:
我在构建容器后尝试启动 cron 和 supervisor 等服务,但服务没有启动,我需要手动执行容器内的命令。
我的意图是一旦容器启动,这些服务就已经在运行了。
我创建了一个适用于 Caddy Web Server 启动的 shell 脚本,但不适用于其他服务。
我的 init-services.sh
#!/bin/sh
/usr/bin/caddy --conf /etc/Caddyfile --log stdout
service supervisor start
service cron start
我的 Dockerfile 片段
RUN apt-get update && apt-get install --no-install-recommends -y \
wget \
nano \
git \
unzip \
iputils-ping \
gnupg \
supervisor \
cron
COPY .docker/scripts/init-services.sh /usr/bin/init-services
RUN chmod +x /usr/bin/init-services
CMD ["/usr/bin/init-services"]
【问题讨论】:
-
最佳实践是重新设计您的系统,让每个容器拥有一项服务。我还会尽量避免安装一些对您正在运行的服务无用的工具(
nano、git、ping)并将其限制为仅一项服务你正在尝试运行。
标签: docker ubuntu docker-compose supervisord