【问题标题】:Docker container is not running even if -dDocker 容器没有运行,即使 -d
【发布时间】:2019-06-19 15:30:57
【问题描述】:

我是法国人和新来的(所以我不知道堆栈溢出是如何工作的,他的社区)我会尝试适应自己。

所以,我的第一个问题是: 我使用使用 Dockerfile 创建的图像运行 docker 容器。 (有DNS容器) 在 Dockerfile 中,这个容器必须在启动时启动 script.sh。 但使用后:

 docker run -d -ti -p 53:53 alex/dns

(使用 -p 53:53 因为 DNS。)

我可以看到我的 DNS 在我的 script.sh 末尾运行,但是,当我这样做时: 码头工人 ps -a ;但是 > 容器没有运行。

我是 docker 新手。 2天前就开始学了。

我尝试添加(当然是一个一个):

 CMD ["bash"] 
 CMD ["/bin/bash"] 

运行 bash 并确保它不会断电。

我尝试在 Docker 运行命令中添加 -d

我尝试使用:
docker 提交 ti alex/dns 和 docker exec -ti alex/dns /bin/bsh

我的 dockerfile 文件:

FROM debian
...
RUN apt-get install bind9
...
ADD script.sh /usr/bin/script.sh
...
ENTRYPOINT ["/bin/bash", "script.sh]
CMD ["/bin/bash"]

我的文件 script.sh :

service bind9 stop

 *It copy en remplace conf file for bind9*

service bind9 restart

我希望没有太多错误,并且我设法让自己理解

我希望 DNS 容器保持运行并可以与 docker exec 一起使用。 但是现在,在使用 docker run 之后,容器在我的脚本完成后开始停止。是的,DNS 服务器正在运行容器在关闭之前告诉我 [ok] Bind9 正在运行或类似的东西。但是在容器停止之后。

【问题讨论】:

    标签: docker


    【解决方案1】:

    我怀疑您面临的问题是您的容器将在 service bind9 restart 完成后终止。

    您需要运行一个前台进程以保持容器运行。

    我不熟悉 bind9,但我建议您探索在容器的前台运行 bind9 的方法。

    您运行容器的命令是正确的: docker run -d -ti -p 53:53 alex/dns

    您可能需要:

    RUN apt-get update && apt-get -y install bind9

    您可能需要类似(不知道):

    ENTRYPOINT ["/bind9"]

    谷歌搜索 ;-)

    https://manpages.debian.org/jessie/bind9/named.8.en.html

    配置好之后,就可以作为前台进程运行了:

    ENTRYPOINT ["named","-g"]

    【讨论】:

    • 非常感谢。我不知道容器只有在有前台进程的情况下才会保持。我在想 DNS 服务器可以让容器保持 UP,但不行。
    • 不客气!有一些技巧可以避免这种情况,但是对于容器来说,每个容器都有一个前台进程是一种很好的做法。
    猜你喜欢
    • 2020-07-11
    • 2021-03-18
    • 1970-01-01
    • 2019-01-19
    • 2019-11-06
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多