Как можно найти имя изображения в этом файле компоновки докеров?

Я написал docker-compose.yml файл со ссылкой на этот учебник: Запуск PostGraphile в Docker, но когда я запускаю эту команду docker-compose pull && docker-compose up -d для обновления изображения, возникает ошибка:

WARNING: Some service image(s) must be built from source by running:
    docker compose build graphql
Error response from daemon: pull access denied for forum-example-graphql, repository does not exist or may require 'docker login': denied: requested access to the resource is denied

Но если я бегу docker-compose up -d, то все ок.

Интересно, как можно найти изображение forum-example-graphql в следующем фрагменте (из докер-хаба?)?

graphql:
    container_name: forum-example-graphql
    restart: always
    image: forum-example-graphql
    build:
        context: ./graphql
    env_file:
        - ./.env
    depends_on:
        - db
    networks:
        - network
    ports:
        - 5433:5433
    command: ["--connection", "${DATABASE_URL}", "--port", "5433", "--schema", "public", "--append-plugins", "postgraphile-plugin-connection-filter"]

Я узнал из здесь, что имя изображения в файле компоновки основано на имени созданного изображения, но я не назвал локальное изображение как forum-example-graphql.

В другом сервисе конфигурация следующая:

  postgres:
    container_name: postgres
    image: postgres:latest
    restart: always
    volumes:
      - "./postgres-data:/var/lib/postgresql/data"
    networks:
        - network
    ports:
      - "5432:5432"

Значение изображения установлено как postgres:latest, и изображение извлекается непосредственно из концентратора докеров с использованием этой конфигурации, без контекста и файла Docker.

Затем мне интересно, как называется локальный образ и как он соотносится со значением образа службы.

(Рассмотрите возможность удаления строки image:, чтобы избежать этого предупреждения, и позвольте Compose самому выбрать имя изображения. Вам также не нужно container_name:, и, вероятно, вы можете удалить каждый блок networks: во всем файле.)

David Maze 13.02.2023 12:39

@DavidMaze Итак, если я установлю image:, вытащенное изображение node:alpine из докер-хаба будет иметь локальное имя forum-example-graphql?

Lerner Zhang 13.02.2023 12:52

Вам нужно docker-compose build это изображение (это может быть FROM node:alpine или что-то еще). Если вы не установите image:, Compose выберет для него имя. Если вы установите его, то, как правило, вы захотите установить для него фактический Docker Hub или другое имя реестра image: registry-example-com/forum/graphql, где вы можете push или pull его.

David Maze 13.02.2023 13:00
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
2
3
54
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

docker-compose pull, извлекает образ forum-example-graphql из реестра образов, по умолчанию (концентратор докеров).

но поскольку он указан для сборки из каталога

build:
    context: ./graphql

Следовательно, это изображение не нужно извлекать, вы можете использовать эту опцию --ignore-buildable с docker-compose pull, чтобы пропустить изображения с локальным контекстом сборки.

Также docker-compose up -d по умолчанию извлекает изображение, если оно недоступно, и умно игнорирует локальные контексты и извлекает изображения, которые необходимо извлечь.

Спасибо за Ваш ответ. Если я не ошибаюсь, вы имеете в виду, что 1) docker-compose проверяет Dockerfile в build: context, и если образ установлен, образ будет извлечен из реестра образов, а локальному образу будет присвоено имя, соответствующее тому, что мы установили в docker-compose.yml > services > graphql > image, в противном случае 2) конфигурация image: будет использоваться для извлечения образа из реестра, а имя локального образа будет именем по умолчанию. Я прав?

Lerner Zhang 14.02.2023 20:50

да, docker-compose проверяет образ в реестре. и docker-compose up -d делает и то, и другое. 1) проверка файла в реестре, 2) сборка образа на локальном компьютере, если предоставлен контекст build:

Yash Soni 15.02.2023 10:25

Невозможно выполнить команду docker-compose pull на forum-example-graphql-docker, потому что ее нет в общедоступном репозитории Docker Hub. Частью урока является то, что вы сами создаете это изображение, используя docker-compose build (см. здесь).

После выполнения команды build вы можете использовать up -d, чтобы запустить образ, который вы создаете (с именем forum-example-graphql).

Другие вопросы по теме