docker镜像和docker容器名称从何而来?

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

为了启动 Docker 容器,我运行了命令

docker compose up -d
。 (其实
-d
开关并不重要。)

docker ps
显示以下容器正在运行。

CONTAINER ID   IMAGE                            COMMAND                  CREATED         STATUS         PORTS                               NAMES
678ef93d18dc   python-my-python-project         "python3 -m my_pytho…"   6 seconds ago   Up 5 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   python-my-python-project-1

imagecontainer名称从何而来?这些字符串是如何生成的?

Image Name: python-my-python-project
Container Name: python-my-python-project-1

Dockerfile
的内容:

# syntax=docker/dockerfile:1

from python:3.12-bookworm
workdir /python-my-python-project
copy ./my_python_project ./my_python_project
copy ./requirements.txt .
run pip3 install --no-cache-dir --upgrade -r requirements.txt
cmd ["python3", "-m", "my_python_project"]
expose 80

docker-compose.yml
的内容:

services:
    python-my-python-project:
        build: .
        ports:
            - "80:80"

我找不到任何有关如何创建名称的文档。据我了解,名称 不应该在 Dockerfile

docker-compose.yml
 规范中手动指定,因为 
在尝试将容器化应用程序部署为群的一部分时,手动固定名称会导致问题

什么“规则”导致生成名称

python-my-python-project

docker docker-compose
1个回答
0
投票

其具体格式因 Compose 的实现而异。 对于当前的 Docker-plugin Compose 工具版本 2,镜像名称的规则来自于一个名为

GetImageNameOrDefault
的函数:它由 Compose 项目名称、连字符和特定的 Compose 服务名称组成。 类似的规则适用于生成的容器名称,包括复制容器的副本编号。 (基于 Python 的 Compose 版本 1 在这些名称中使用下划线。)

这套规则意味着以下几点:

  • 您几乎不需要手动指定
    container_name:
    ,因为 Compose 可以生成唯一的名称。 大多数
    docker
    CLI 命令都有
    docker compose
    等效命令,可以在
    docker-compose.yml
    文件中按名称查找服务。
  • 当您同时指定
    image:
    时,无需手动指定
    build:
    ,除非您专门计划将映像推送到注册表。
    services:
       something:
         build: .
         image: registry.example.com/project/something:${SOMETHING_TAG:-latest}
    
  • 您不需要将项目名称作为 Compose 服务名称的一部分包含在内,因为 Compose 会将其单独包含在生成的名称中。 诸如
    db
    app
    之类的短名称在此特定 Compose 项目的上下文中将是明确的。
© www.soinside.com 2019 - 2024. All rights reserved.