Docker容器总是重启

标签 docker dockerfile docker-container docker-image

我尝试使用 Docker 撰写文件从 debian 镜像启动 Docker 容器。 但是当我执行 docker ps - a 时,容器总是会重新启动。我不知道为什么:s

这是我的 dockerfile:

FROM debian:jessie
ENV DEBIAN_FRONTEND noninteractive
RUN mkdir /home/server
RUN cd /home/server
VOLUME /home/server
CMD /bin/bash

这是我的 docker 撰写文件:

version: '2'
 services:
server:
 build: .
 restart: always
 container_name: server
 volumes:
   - "/home/binaries:/home/server"

最佳答案

当 docker-compose 运行你的“服务器”容器时,它将立即终止。一个docker容器至少需要有一个正在运行的进程,否则容器将会退出。在您的示例中,您没有启动一个保持事件状态的进程。

当您配置了restart:always时,docker-compose将不断地为“服务器”重新启动新容器。这应该可以解释您所描述的行为。

我见过 docker-compose 文件,其中定义了仅安装图像的数据容器(与 volumes_from 结合使用)。他们故意使用 /bin/true 作为命令,这也会导致永久但无害的重新启动。例如:

data:
  restart: always
  image: postgres:latest
  volumes:
    - /var/lib/postgresql
  command: "true"

如果重新启动不是您想要的,您可以在容器中启动一个进程来执行一些有用的操作,例如运行 Web 服务器或数据库。但仅靠 bash 并不能让容器保持活力。以非交互模式运行的 bash 将立即退出。

关于Docker容器总是重启,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45334111/

相关文章:

docker - 错误 : Cannot find module "fibers/future" in docker container

docker - 无法从容器内访问Docker API

docker - 在 docker hub 上共享多容器应用程序的最简单方法是什么?

mysql - 自定义 mysql alpine 镜像未从作为卷安装的 docker-entrypoint-initdb.d 加载 init.sql

docker - Docker --storage-opt size 与容器实际磁盘使用情况的关系

docker - 如何删除所有Docker容器?

linux - 由于用户名无效,Azure VM 创建失败

java - 在 Docker 容器中安装 MySQL Connector/J

amazon-web-services - AWS Elastic Beanstalk 和 Docker - EXPOSE 至少需要一个参数

docker - RabbitMQ在不同docker容器中的状态