Puncte:0

Citire neregulată a parametrilor Docker-compose

drapel co

Încerc să construiesc o stivă de containere pentru o aplicație și folosesc .env fișier astfel încât să treacă diferiții parametri care vor fi utilizați în timpul procesului de construire.

Stack Config:

    Docker versiunea 20.10.14, build a224086d
    Docker Compose versiunea v2.5.1
    Docker Desktop versiunea 4.8.2 (79419)
.
âââ docker
â âââ php
â âââ caddy
âââ Dockerfile
âââ Docker-compose.yml
âââ .env
âââ README.md

The .env conţinut:

###> symfony/framework-bundle ###
APP_NAME=aplicație
APP_ENV=dev
APP_SECRET=05425c77d4ec3dc1c301c4547ca4ac89
###< symfony/framework-bundle ###

###> docker-compose param ###
SERVER_NAME=${APP_NAME}.local
PHP_VERSION=7.4
COMPOSER_VERSION=2.2.10
CADDY_VERSION=2
HTTP_PROXY=''
APCU_VERSION=5.1
PCOV_VERSION=1.0
XDEBUG_VERSION=3.1.2

MARIABDB_VERSION=10.6
MARIADB_DATABASE=${APP_NAME}_date
MARIADB_ROOT_PASSWORD=rădăcină
MARIADB_USER=utilizator
MARIADB_USER_PASSWORD=utilizator
###< docker-composer param ###

The Docker-compose.yaml continutul fisierului:

versiunea: "3.7"
Servicii:
  db:
    container_name: ${APP_NAME:-app}_db
    imagine: mariadb:${MARIADB_VERSION:-10.6}
    reporniți: dacă nu este oprit
    porturi:
      - „3306:3306”
    volume:
      - db_socket:/var/run/mysqld/
    mediu inconjurator:
      MARIADB_INITDB_SKIP_TZINFO: adevărat
      TZ: Europa/Paris
      MARIADB_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD:-root}
      MARIADB_DATABASE: ${MARIADB_DATABASE}
      MARIADB_USER: ${MARIADB_USER:-user}
      MARIADB_PASSWORD: ${MARIADB_PASSWORD:-user}

  php:
    container_name: ${APP_NAME:-app}_php
    reporniți: dacă nu este oprit
    depinde de:
      - db
    construi:
      context: .
      țintă: php_dev
      argumente:
        PHP_VERSION: ${PHP_VERSION:-7.4}
        COMPOSER_VERSION: ${COMPOSER_VERSION:-2.2.10}
        HTTP_PROXY: ${HTTP_PROXY}
        XDEBUG_VERSION: ${XDEBUG_VERSION:-5.1.2}
    # https://github.com/compose-spec/compose-spec/blob/master/spec.md#healthcheck
    control medical:
      interval: 10s
      timeout: 3s
      reîncercări: 3
      perioada_început: 30s
    volume:
      - php_socket:/var/run/php
      - ./app:/srv/app/
    mediu inconjurator:
      # Rulați „composer require symfony/orm-pack” pentru a instala și configura Doctrine ORM
      DATABASE_URL: mysql://${MARIA_USER:-symfony}:${MARIA_USER_PASSWORD:-ChangeMe}@db:3306/${MARIA_DB:-app}?unix_socket=/var/run/mysqld/&serverVersion=${MARIA_VERSION:- 10,6}
      # Consultați https://docs.docker.com/docker-for-mac/networking/#i-want-to-connect-from-a-container-to-a-service-on-the-host
      # Consultați https://github.com/docker/for-linux/issues/264
      # `client_host` de mai jos poate fi înlocuit opțional cu `discover_client_host=yes`
      # Adăugați `start_with_request=yes` pentru a începe sesiunea de depanare la fiecare solicitare
      XDEBUG_CONFIG: >-
        client_host=host.docker.internal
      XDEBUG_MODE: depanare
      # Acesta ar trebui să corespundă serverului declarat în PHPStorm `Preferences | Limbi și cadre | PHP | Servere`
      # Apoi PHPStorm va folosi mapările de căi corespunzătoare
      PHP_IDE_CONFIG: serverName=symfony
      # extra_hosts:
      # # Asigurați-vă că host.docker.internal este definit corect pe Linux
      # - host.docker.internal: gazdă-gateway
      # Rulați „composer require symfony/mercure-bundle” pentru a instala și configura integrarea Mercure
      # https://symfony.com/doc/current/mercure.html
      MERCURE_URL: ${CADDY_MERCURE_URL:-http://caddy/.well-known/mercure}
      MERCURE_PUBLIC_URL: https://${SERVER_NAME:-localhost}/.well-known/mercure
      MERCURE_JWT_SECRET: ${CADDY_MERCURE_JWT_SECRET:-!ChangeMe!}


  caddy:
    construi:
      context: .
      țintă: app_caddy
      argumente:
        CADDY_VERSION: ${CADDY_VERSION:-2}
    depinde de:
      - php
    reporniți: dacă nu este oprit
    volume:
      - php_socket:/var/run/php
      - caddy_data:/data
      - caddy_config:/config
    porturi:
      # HTTP
      - tinta: 80
        publicat: ${HTTP_PORT:-80}
        protocol: tcp
      # HTTPS
      - tinta: 443
        publicat: ${HTTPS_PORT:-443}
        protocol: tcp
      # HTTP/3
      - tinta: 443
        publicat: ${HTTP3_PORT:-443}
        protocol: udp
    mediu inconjurator:
      SERVER_NAME: ${SERVER_NAME:-localhost, caddy:80}
      MERCURE_PUBLISHER_JWT_KEY: ${CADDY_MERCURE_JWT_SECRET:-!ChangeMe!}
      MERCURE_SUBSCRIBER_JWT_KEY: ${CADDY_MERCURE_JWT_SECRET:-!ChangeMe!}


volume:
  php_socket:
  db_socket:
  caddy_data:
  caddy_config:

The Dockerfile conţinut:

ARG PHP_VERSION
ARG CADDY_VERSION
ARG COMPOSER_VERSION
ARG HTTP_PROXY
ARG APCU_VERSION
ARG PCOV_VERSION
ARG XDEBUG_VERSION

# Obligator de încărcare un https://stackoverflow.com/a/65044947/1374947
FROM compozitor:${COMPOSER_VERSION} AS composer_local
DIN php:${PHP_VERSION}-fpm-alpine AS php
LABEL "maintainer"="DEIL"
LABEL "version"="1.0"
LABEL "description"="Imagine de bază pentru proiectul symfony"

ARG DEBIAN_FRONTEND=neinteractiv

RUN actualizare apk; \
    upgrade apk; \
    apk add --no-cache \
        acl \
        bash \
        fcgi \
        fisier \
        gettext \
        gnu-libiconv \
        nano \
    ;
# instalați gnu-libiconv și setați LD_PRELOAD env pentru ca iconv să funcționeze complet pe imaginea Alpine.
# vezi https://github.com/docker-library/php/issues/240#issuecomment-763112749
ENV LD_PRELOAD /usr/lib/preloadable_libiconv.so
RUN set -eux; \
    apk add --no-cache --virtual .build-deps \
        $PHPIZE_DEPS \
        icu-dev \
        libzip-dev \
        zlib-dev \
        mysql-client \
        ldb-dev \
        libldap \
        openldap-dev \
        openldap-clients \
        freetype-dev \
        libpng-dev \
        jpeg-dev \
        libjpeg-turbo-dev \
    ; \
    \
    docker-php-ext-configure zip; \
       docker-php-ext-configure ldap; \
    docker-php-ext-install -j$(nproc) \
        intl \
        ldap \
        zip \
        pdo_mysql \
        mbstring \
        gd \
    ; \
    set de configurare pear http_proxy $HTTP_PROXY; \
    pecl install \
    apcu-${APCU_VERSION} \
    ; \
    \
    runDeps="$( \
        scanelf --needed --nobanner --format '%n#p' --recursive /usr/local/lib/php/extensions \
            | tr ',' '\n' \
            | sortează -u \
            | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
    )"; \
    apk add --no-cache --virtual .phpexts-rundeps $runDeps; \
    \
    apk del .build-deps; \


COPIEAZĂ ./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”]
# Configurație optimă furnizată de PHP-FPM pentru dezvoltare
RUN ln -s $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini
COPY docker/php/conf.d/symfony.dev.ini $PHP_INI_DIR/conf.d/symfony.ini

COPY docker/php/php-fpm.d/zz-docker.conf /usr/local/etc/php-fpm.d/zz-docker.conf

VOLUM /var/run/php

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

WORKDIR /srv/app
RUN set -eux; \
    mkdir -p var/cache var/log; \
    ls -halt /srv/app; \
    mkdir -p var/cache var/log; \
    chmod +x bin/consola; sincronizare

CMD [„php-fpm”]

# Dockerfile pentru a include xdebug
# https://github.com/dunglas/symfony-docker/blob/main/docs/xdebug.md
DE LA php AS php_dev
RUN set -eux; \
    apk add --no-cache --virtual .build-deps $PHPIZE_DEPS; \
    pecl install xdebug-$XDEBUG_VERSION; \
    docker-php-ext-enable xdebug; \
    apk del .build-deps ; \

DIN php ca php_test
# Adăugați la conf pentru PCOV - Acoperire cod
COPIEAZĂ ./docker/php-test/pcov.ini /
RUN set -eux; \
    apk add --no-cache --virtual .build-deps $PHPIZE_DEPS; \
    pecl install pcov-${PCOV_VERSION}; \
    pecl clear-cache; \
    docker-php-ext-enable pcov; \
    cat /pcov.ini >> /usr/local/etc/php/conf.d/docker-php-ext-pcov.ini; \
    apk del .build-deps;

WORKDIR /srv/app
## Copie des sources dans le conteneur.
## Copiere le composer.json și .lock și installer les dépendances pendant le build.
COPY --chown=www-data:www-data . .

FROM caddy:${CADDY_VERSION}-builder-alpine AS caddy_builder
RUN xcaddy build \
    --cu github.com/dunglas/mercure \
    --cu github.com/dunglas/mercure/caddy \
    --cu github.com/dunglas/vulcain \
    --with github.com/dunglas/vulcain/caddy ;

FROM caddy:${CADDY_VERSION} AS app_caddy
WORKDIR /srv/app

COPIE --from=dunglas/mercure:v0.11 /srv/public /srv/mercure-assets/
COPY --from=caddy_builder /usr/bin/caddy /usr/bin/caddy
COPY --from=php /srv/app/public public/
COPIEAZĂ ./docker/caddy/Caddyfile /etc/caddy/Caddyfile

Nu pot construi imaginile și containerele aferente; Compilarea returnează următoarele erori neregulate, fie în ceea ce privește formatul versiunii menționate pentru imaginea caddy, fie pentru imaginea php:

λ docker-compose build --pull --no-cache
[+] Clădirea 0.2s (6/6) TERMINATĂ
 => [scheleton-ci_caddy intern] încărcați definiția construcției din Dockerfile 0.0s 
 => => transfer dockerfile: 32B 0.0s 
 => [scheleton-ci_php intern] încărcați definiția construcției din Dockerfile 0.0s 
 => => transfer dockerfile: 32B 0.0s 
 => [scheleton-ci_caddy intern] încărcare .dockerignore 0.0s 
 => => context de transfer: 2B 0.0s 
 => [scheleton-ci_php intern] încărcare .dockerignore 0.0s 
 => => context de transfer: 2B 0.0s 
 => ANULAT [skeleton-ci_caddy intern] încărcarea metadatelor pentru docker.io/library/caddy:2-builder-alpine 0.0s 
 => ANULAT [skeleton-ci_caddy intern] încărcarea metadatelor pentru docker.io/library/caddy:2 0.0s 
nu s-a rezolvat: eroare rpc: cod = necunoscut desc = nu s-a rezolvat cu frontend dockerfile.v0: nu s-a putut crea definiția LLB: nu s-a putut analiza numele de etapă „php:-fpm-alpine”: format de referință nevalid

Nu reușesc să găsesc cauza probabilă a acestei erori neregulate și să o corectez. Am pierdut ceva?

drapel vn
https://docs.docker.com/engine/reference/builder/#scope „O instrucțiune ARG iese din domeniul de aplicare la sfârșitul etapei de construire în care a fost definită. Pentru a utiliza un arg în mai multe etape, fiecare etapă trebuie să includă instrucțiunea ARG.”
Raymond avatar
drapel co
Mulțumesc, examinez fișierul docker în consecință.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.