使用docker compose在后台运行ubuntu容器

使用docker compose在后台运行ubuntu容器,docker,docker-compose,ubuntu-18.04,Docker,Docker Compose,Ubuntu 18.04,我可以使用以下docker命令运行docker容器: docker run -it ubuntu /bin/bash 现在,我正尝试使用docker compose来实现这一点: version: "3" services: ubuntu: container_name: ubuntu image: ubuntu restart: on-failure command: "/bin/bash" 现在当我这样做的时候: docker-compose up

我可以使用以下docker命令运行docker容器:

docker run -it  ubuntu /bin/bash
现在,我正尝试使用docker compose来实现这一点:

version: "3"
services:
  ubuntu:
    container_name: ubuntu
    image: ubuntu
    restart: on-failure
    command: "/bin/bash"
现在当我这样做的时候:

 docker-compose up -d
可以看到docker容器立即启动和退出

我试着看了看日志:

docker logs b8 //b8 is container id
但是没有错误日志

如何使用docker保持ubuntu容器在后台运行。 (我在windows上使用docker,linux版本)

这是正常的

您正在启动一个ubuntu容器,命令是
bash
因此是根进程)。要想让bash保持活力,您需要用一个终端连接它。这就是为什么当您想要在容器中获取bash时,您会在命令中使用
-ti

docker container exec -ti [my_container_id] bash
因此,如果你想让你的ubuntu容器保持活动状态,而不想将其连接到终端,你就必须使用一个进程,该进程将在你想要的时间内保持活动状态。
下面是一个以
sleep infinity
为主要进程的示例

version: "3"
services:
  ubuntu:
    container_name: ubuntu
    image: ubuntu
    restart: on-failure
    command: ["sleep","infinity"]

在本例中,您的容器将无限期地保持运行。

没有错误日志,因为没有错误。您启动了一个容器,但由于它没有任何事情要做(除了在没有命令的情况下运行bash),它只是因为完成了它的“任务”而存在。如果你只是想让ti在后台运行,什么都不做,修改它的入口点,在真正睡眠时执行类似于
的操作,那么运行裸
ubuntu
映像,或者只使用一个shell作为主容器进程,这是非常不寻常的。通常,您会将应用程序(或数据库或REST API等一部分)打包到自定义映像中,并在Dockerfile中使用其默认CMD运行该应用程序。@DavidMaze,如果我想在win10系统上的cron作业上运行rsync怎么办?是的,我可以创建一个docker文件并添加APK,但不需要命令,只需要在后台使用它。这似乎足够常见,可以将cron守护进程作为主容器进程运行。正如您所说,您需要一个自定义映像来添加到运行和安装crontab所需的程序中,还需要将默认CMD设置为运行cron。