我的 docker compose 有问题。也许有人知道如何解决它。 我使用 docker 创建了一个私有注册表,然后创建了一个自定义映像(基于 debian)并将其推送到私有注册表。
所以,首先我会做
docker login registry.domain.com
,然后:
当我使用自定义映像运行新容器时:
docker run -it --name TEST registry.domain.com/debian:2 /bin/bash
它工作正常,容器启动,我可以使用它。 但是,当我使用这个 docker compose 时:
version: "2.1"
services:
TEST:
container_name: TEST
image: registry.domain.com/debian:2
#environment:
volumes:
- ./config:/media/nextcloud
ports:
- 80:80
restart: unless-stopped
容器没有启动,正在bucle中重新启动:
Restarting (0) 4 seconds ago
另外,当我尝试使用 docker logs TEST
检查日志时,它没有显示任何内容,0 行...(我尝试过版本 2.1 和 3)
有人可以帮我吗?我没有主意了。
问候,
首先快速了解一下,容器是进程的包装器,使用各种命名空间和其他 Linux 内核隔离技术对其进行配置。当该进程退出时,容器就消失了。这与启动内核然后连接到在 VM 中部署应用程序的 VM 不同。
Bash 运行直到到达退出或类似命令,或者 stdin 指示输入结束(例如到达 shell 脚本的末尾)。使用交互式 tty (
docker run -it
),标准输入会打开,直到您关闭终端或运行 <ctrl-d>
或其他命令来终止输入。
使用
docker compose
,该命令永远不会收到任何输入,因此它会立即退出。这与尝试运行 docker run -i --rm debian </dev/null
没什么不同,只是在 Linux 中运行 bash </dev/null
,或者顶部只有一行的 shell 脚本 #!/bin/bash
。
您可以通过多种方式保持容器运行。一种选择是使用
tail -f /dev/null
而不是 shell,在后台不执行任何操作。但是,大多数人启动容器来执行某些操作,因此您应该运行应用程序/服务。它需要在前台启动,以便容器保持等待它退出。