Строка ошибки синтаксического анализа dockerfile 63: неизвестный флаг: ссылка

Терминал

COMPOSE_DOCKER_CLI_BUILD=1 COMPOSE_DOCKER_CLI_LINK=1 DOCKER_BUILDKIT=1 docker-compose up --build

Вывод

Successfully built fe4aa685d34a0cdeb29c4af824f2cfa7c11a6d036ee85ee19bd7615a518d80a9
Building php
[+] Building 0.8s (4/4) FINISHED                                                                                                                                      
 => [internal] load build definition from Dockerfile                                                                                                             0.0s
 => => transferring dockerfile: 38B                                                                                                                              0.0s
 => [internal] load .dockerignore                                                                                                                                0.1s
 => => transferring context: 35B                                                                                                                                 0.0s
 => resolve image config for docker.io/docker/dockerfile:experimental                                                                                            0.4s
 => CACHED docker-image://docker.io/docker/dockerfile:experimental@sha256:600e5c62eedff338b3f7a0850beb7c05866e0ef27b2d2e8c02aa468e78496ff5                       0.0s
failed to solve with frontend dockerfile.v0: failed to solve with frontend gateway.v0: rpc error: code = Unknown desc = failed to create LLB definition: 

dockerfile parse error line 63: Unknown flag: link

Traceback (most recent call last):
  File "/usr/bin/docker-compose", line 11, in <module>
    load_entry_point('docker-compose==1.25.0', 'console_scripts', 'docker-compose')()
  File "/usr/lib/python3/dist-packages/compose/cli/main.py", line 72, in main
    command()

Докерфайл

COPY --link docker/php/conf.d/app.ini $PHP_INI_DIR/conf.d/ # line 63

Сервис/контейнеры докеров доступны по адресу: https://api-platform.com/docs/distribution/

Кажется, все в порядке. Я думал, что некоторые из файлов, которые будут использоваться по ссылке, не могут существовать, когда работает COPY. Вы можете проверить содержимое PHP_INI_DIR?

Nuno Oliveira 24.11.2022 12:32

По правде говоря. Я нигде не вижу PHP_INI_DIR определенного. Этого нет ни в моем .env файле, ни в docker-compose.yml, docker-compose.override.yml или docker-compose.prod.yml

cookie 24.11.2022 12:57

Попробуйте без переменной и посмотрите, как это работает.

Nuno Oliveira 24.11.2022 13:09

это то, что я сейчас пытаюсь - без переменной

cookie 24.11.2022 13:13

Идеально. Обновляйте здесь, когда у вас есть новости.

Nuno Oliveira 24.11.2022 13:14

такая же ошибка. Затем я снова пытаюсь установить переменную в .env - PHP_INI_DIR=/etc/php/8.1/cli, та же ошибка. Между тем, в документах ничего по этому поводу нет.

cookie 24.11.2022 13:18

Хам. Вы пытаетесь связать файл с каталогом?

Nuno Oliveira 24.11.2022 13:20

Как и во всех командах Dockerfile, мы просто копируем содержимое нашего локального хоста в контейнер, т.е. COPY path/to/some-local-file.sh /path/to/container

cookie 24.11.2022 15:17

Ага. Но в этом примере у вас нет опции --link.

Nuno Oliveira 24.11.2022 15:49

Опуская --link, мы можем добиться тех же результатов: docs.docker.com/engine/reference/builder

cookie 24.11.2022 15:57

Я решаю эту проблему, экспортируя переменную оболочки, чтобы включить режим BuildKit. экспортировать DOCKER_BUILDKIT=1

Adnen Chouibi 22.01.2023 11:16
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
11
1 046
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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

У нас больше успеха при удалении флагов --link внутри Dockerfile.

#syntax=docker/dockerfile:experimental
# Adapted from https://github.com/dunglas/symfony-docker

# Prod image
FROM php:8.1-fpm-alpine AS app_php

ENV APP_ENV=prod

WORKDIR /srv/app

# persistent / runtime deps
RUN apk add --no-cache \
        acl \
        fcgi \
        file \
        gettext \
        git \
    ;

RUN set -eux; \
    apk add --no-cache --virtual .build-deps \
        $PHPIZE_DEPS \
        icu-data-full \
        icu-dev \
        libzip-dev \
        zlib-dev \
    ; \
    \
    docker-php-ext-configure zip; \
    docker-php-ext-install -j$(nproc) \
        intl \
        zip \
    ; \
    pecl install \
        apcu \
    ; \
    pecl clear-cache; \
    docker-php-ext-enable \
        apcu \
        opcache \
    ; \
    \
    runDeps = "$( \
        scanelf --needed --nobanner --format '%n#p' --recursive /usr/local/lib/php/extensions \
            | tr ',' '\n' \
            | sort -u \
            | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
    )"; \
    apk add --no-cache --virtual .app-phpexts-rundeps $runDeps; \
    \
    apk del .build-deps

###> recipes ###
###> doctrine/doctrine-bundle ###
RUN apk add --virtual .pgsql-deps postgresql-dev; \
    docker-php-ext-install -j$(nproc) pdo_pgsql; \
    apk add --no-cache --virtual .pgsql-rundeps so:libpq.so.5; \
    apk del .pgsql-deps
###< doctrine/doctrine-bundle ###
###< recipes ###

RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
COPY docker/php/conf.d/app.ini $PHP_INI_DIR/conf.d/
COPY docker/php/conf.d/app.prod.ini $PHP_INI_DIR/conf.d/

COPY docker/php/php-fpm.d/zz-docker.conf /usr/local/etc/php-fpm.d/zz-docker.conf
RUN mkdir -p /var/run/php

COPY docker/php/docker-healthcheck.sh /usr/local/bin/docker-healthcheck
RUN chmod +x /usr/local/bin/docker-healthcheck

HEALTHCHECK --interval=10s --timeout=3s --retries=3 CMD ["docker-healthcheck"]

COPY docker/php/docker-entrypoint.sh /usr/local/bin/docker-entrypoint
RUN chmod +x /usr/local/bin/docker-entrypoint

ENTRYPOINT ["docker-entrypoint"]
CMD ["php-fpm"]

# https://getcomposer.org/doc/03-cli.md#composer-allow-superuser
ENV COMPOSER_ALLOW_SUPERUSER=1
ENV PATH = "${PATH}:/root/.composer/vendor/bin"

COPY --from=composer/composer:2-bin /composer /usr/bin/composer

# prevent the reinstallation of vendors at every changes in the source code
COPY composer.* symfony.* ./
RUN set -eux; \
    composer install --prefer-dist --no-dev --no-autoloader --no-scripts --no-progress; \
    composer clear-cache

# copy sources
COPY . .
RUN rm -Rf docker/

RUN set -eux; \
    mkdir -p var/cache var/log; \
    composer dump-autoload --classmap-authoritative --no-dev; \
    composer dump-env prod; \
    composer run-script --no-dev post-install-cmd; \
    chmod +x bin/console; sync

# Dev image
FROM app_php AS app_php_dev

ENV APP_ENV=dev XDEBUG_MODE=off
VOLUME /srv/app/var/

RUN rm $PHP_INI_DIR/conf.d/app.prod.ini; \
    mv "$PHP_INI_DIR/php.ini" "$PHP_INI_DIR/php.ini-production"; \
    mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"

COPY docker/php/conf.d/app.dev.ini $PHP_INI_DIR/conf.d/

RUN set -eux; \
    apk add --no-cache --virtual .build-deps $PHPIZE_DEPS; \
    pecl install xdebug; \
    docker-php-ext-enable xdebug; \
    apk del .build-deps

RUN rm -f .env.local.php

# Build Caddy with the Mercure and Vulcain modules
FROM caddy:2-builder-alpine AS app_caddy_builder

RUN xcaddy build \
    --with github.com/dunglas/mercure \
    --with github.com/dunglas/mercure/caddy \
    --with github.com/dunglas/vulcain \
    --with github.com/dunglas/vulcain/caddy

# Caddy image
FROM caddy:2-alpine AS app_caddy

WORKDIR /srv/app

COPY --from=app_caddy_builder /usr/bin/caddy /usr/bin/caddy
COPY --from=app_php /srv/app/public public/
COPY docker/caddy/Caddyfile /etc/caddy/Caddyfile

Исходные файлы: https://github.com/api-platform/api-platform/generate

Контейнеры теперь успешно вращаются, но все еще не полностью работают в браузере: -

CONTAINER ID   IMAGE                        COMMAND                  CREATED         STATUS                            PORTS                                                                                                                           NAMES
d0bd06fe7289   fluffy-octo-broccoli_caddy   "caddy run --config …"   6 seconds ago   Up 4 seconds                      2019/tcp, 0.0.0.0:8123->80/tcp, :::8123->80/tcp, 0.0.0.0:444->443/tcp, 0.0.0.0:444->443/udp, :::444->443/tcp, :::444->443/udp

что более интересно, URL-адрес перенаправляет с http://localhost:8123/api на https://localhost/api

Пожалуйста, ознакомьтесь с решением, предложенным @BryceLarkin в stackoverflow.com/a/74925550/1422404 относительно синтаксиса dockerfile.

Marin Bînzari 27.12.2022 15:36

Когда у вас есть рана на руке, лечите рану вместо того, чтобы резать руку

Adnen Chouibi 22.01.2023 10:46

У меня такая же проблема при создании образа с последним шаблоном https://github.com/dunglas/symfony-docker в моем конвейере GitLab CI. Странно то, что на моем локальном ноутбуке с Ubuntu 22.04 и последним движком Docker все работает нормально.

В моем пайплайне GitLab оказалось, что проблема в том, что и API-платформа, и шаблон symfony-docker используют Dockerfile:1.4, который содержит --link параметры для COPY команды.

Есть два (2) способа решить эту проблему:

  1. Удалите все --link команды из Dockerfile. Он создаст изображение с обычным COPY, и ваше изображение будет работать нормально.

  2. Если вы все еще хотите использовать изображение по умолчанию с link, вам нужно добавить DOCKER_BUILDKIT=1 в качестве переменной среды. Я использую этот метод и обновляю сервис docker:dind до docker:20.10.21-dind, и теперь мой конвейер работает хорошо.

Вам нужно добавить # syntax=docker/dockerfile:1.4 в начало вашего Dockerfile, чтобы включить флаг --link.

Источник: https://www.docker.com/blog/image-rebase-and-improved-remote-cache-support-in-new-buildkit/

У моего такая же ошибка. Просто удалю

Rudy A. Hernandez 30.12.2022 06:55

Вы включаете buildkit?

BryceLarkin 30.12.2022 19:31

Вам нужно добавить строку ниже в верхнюю часть вашего Dockerfile.

# syntax=docker/dockerfile:1.4

Согласно официальному документу, вам необходимо включить режим BuildKit https://hub.docker.com/r/docker/dockerfile.

Если вы используете Docker v18.09 или более позднюю версию, режим BuildKit можно включить, установив export DOCKER_BUILDKIT=1 на вашем терминале.

Чтобы использовать флаг --link, установите версию Dockerfile не ниже 1.4.

# syntax=docker/dockerfile:1.4

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