Î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?