docker - Docker 容器运行并立即退出
问题描述
我一直在尝试制作一个 dockerfile 来创建一个可以服务器 html 和 php 页面的网络服务器。
我需要构建图像,当它运行时它会在启动时执行一个 shell 脚本。
我一直在尝试使用 ENTRYPOINT 执行此操作,但我发现容器运行但随后立即退出。
我需要在 dockerfile 中对此进行编码,因为该映像是使用容器优化操作系统直接从 GCP 在 VM 上运行的,它在 VM 启动时运行 docker 映像(所以我没有使用 docker run 的选项 - C)。
这是我目前的尝试。
FROM php:7.2-apache
COPY / /var/www/html/
EXPOSE 80
ADD start_container.sh /usr/bin/start_container
RUN chmod +x /usr/bin/start_container
ENTRYPOINT ["start_container"]
我也试过这个
ENTRYPOINT ["docker-php-entrypoint && start_container"]; sleep infinity
和
CMD ["docker-php-entrypoint"]
目前 bash 脚本只是创建一个 html 文件。
#! /usr/bin/env bash
cat>/var/www/html/indextest.html
解决方案
您不需要覆盖CMD
或entrypoint
作为基础映像从启动 appacheCMD
,这就是为什么您的容器在执行仅创建 index.html 的 bash 脚本后立即死亡的原因。容器的生命周期就是入口点的生命周期,因此入口点应该运行一个长时间运行的进程来保持它们运行。
#!/usr/bin/env bash
echo "hello world" > /var/www/html/indextest.html
在上述情况下,容器将在创建index.html
.
您的情况的解决方法
#!/usr/bin/env bash
echo "hello" > /var/www/html/index.html
exec apache2-foreground
Dockerfile
FROM php:7.2-apache
EXPOSE 80
ADD start_container.sh /usr/bin/start_container
RUN chmod +x /usr/bin/start_container
ENTRYPOINT ["start_container"]
然后
docker build -t test . && docker run -dit -p 8090:80 --rm abc && sleep 2 && curl localhost:8090
您将从终端的容器中看到 hello world。
但最好把它放在index.html
docker build time 上,然后你就不需要覆盖入口点或 CMD。
FROM php:7.2-apache
RUN echo "hello world" > /var/www/html/index.html
EXPOSE 80
推荐阅读
- javascript - 使用按钮自动为滑块设置动画
- reactjs - “http://localhost:3000”已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头
- r - 散点图的 Highcharter 位置闪避
- twitter-bootstrap - Bootstrap 4 导航栏没有正确排列
- python - 无法将 Python socketio 服务器连接到节点 js socketio 客户端
- c++ - 将对象指针传递给通过引用接受对象的函数的正确方法是什么?
- python - 大写单词的计数百分比
- python - 在 Python 中加入两个列表
- python - product_list() 得到了一个意外的关键字参数“product_id”
- android - 在 MVVM 架构中使用 DialogFragment 的正确方法是什么?