Docker 使用私有注册表进行组合

问题描述 投票:0回答:1

我的 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)

有人可以帮我吗?我没有主意了。

问候,

docker docker-compose registry docker-registry
1个回答
0
投票

首先快速了解一下,容器是进程的包装器,使用各种命名空间和其他 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,在后台不执行任何操作。但是,大多数人启动容器来执行某些操作,因此您应该运行应用程序/服务。它需要在前台启动,以便容器保持等待它退出。

© www.soinside.com 2019 - 2024. All rights reserved.