Tôi đang cố gắng tạo ngăn xếp vùng chứa cho một ứng dụng và sử dụng .env
tệp để chuyển các tham số khác nhau sẽ được sử dụng trong quá trình xây dựng.
Cấu hình ngăn xếp:
Docker phiên bản 20.10.14, bản dựng a224086d
Phiên bản Docker Compose v2.5.1
Docker Desktop phiên bản 4.8.2 (79419)
.
âââ docker
â âââ php
– âââ caddie
âââ Dockerfile
âââ Docker-compose.yml
âââ .env
âââ README.md
Các .env
Nội dung:
###> symfony/framework-bundle ###
APP_NAME=ứng dụng
APP_ENV=nhà phát triển
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}_data
MARIADB_ROOT_PASSWORD=gốc
MARIADB_USER=người dùng
MARIADB_USER_PASSWORD=người dùng
###< docker-composer param ###
Các Docker-compose.yaml
nội dung tập tin:
phiên bản: "3.7"
dịch vụ:
đb:
container_name: ${APP_NAME:-app}_db
hình ảnh: mariadb:${MARIADB_VERSION:-10.6}
khởi động lại: trừ khi dừng
cổng:
- "3306:3306"
khối lượng:
- db_socket:/var/run/mysqld/
môi trường:
MARIADB_INITDB_SKIP_TZINFO: đúng
TZ: Châu Âu/Paris
MARIADB_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD:-root}
MARIADB_DATABASE: ${MARIADB_DATABASE}
MARIADB_USER: ${MARIADB_USER:-user}
MARIADB_PASSWORD: ${MARIADB_PASSWORD:-người dùng}
php:
container_name: ${APP_NAME:-app}_php
khởi động lại: trừ khi dừng
phụ thuộc:
- db
xây dựng:
bối cảnh: .
mục tiêu: php_dev
lập luận:
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
kiểm tra sức khỏe:
khoảng thời gian: 10s
thời gian chờ: 3s
thử lại: 3
start_period: 30s
khối lượng:
- php_socket:/var/run/php
- ./app:/srv/app/
môi trường:
# Chạy "composer require symfony/orm-pack" để cài đặt và cấu hình 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}
# Xem https://docs.docker.com/docker-for-mac/networking/#i-want-to-connect-from-a-container-to-a-service-on-the-host
# Xem https://github.com/docker/for-linux/issues/264
# `client_host` bên dưới có thể được thay thế tùy chọn bằng `Discover_client_host=yes`
# Thêm `start_with_request=yes` để bắt đầu phiên gỡ lỗi trên mỗi yêu cầu
XDEBUG_CONFIG: >-
client_host=host.docker.internal
XDEBUG_MODE: gỡ lỗi
# Điều này phải tương ứng với máy chủ được khai báo trong PHPStorm `Preferences | Ngôn ngữ & Framework | PHP | Máy chủ`
# Sau đó, PHPStorm sẽ sử dụng ánh xạ đường dẫn tương ứng
PHP_IDE_CONFIG: serverName=symfony
# máy chủ phụ:
# # Đảm bảo rằng host.docker.internal được xác định chính xác trên Linux
# - host.docker.internal: cổng máy chủ
# Chạy "nhà soạn nhạc yêu cầu symfony/mercure-bundle" để cài đặt và định cấu hình tích hợp 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!}
caddie:
xây dựng:
bối cảnh: .
mục tiêu: app_caddy
lập luận:
CADDY_VERSION: ${CADDY_VERSION:-2}
phụ thuộc:
- php
khởi động lại: trừ khi dừng
khối lượng:
- php_socket:/var/run/php
- caddy_data:/dữ liệu
- caddy_config:/config
cổng:
# HTTP
- mục tiêu: 80
đã xuất bản: ${HTTP_PORT:-80}
giao thức: tcp
# HTTPS
- mục tiêu: 443
đã xuất bản: ${HTTPS_PORT:-443}
giao thức: tcp
# HTTP/3
- mục tiêu: 443
đã xuất bản: ${HTTP3_PORT:-443}
giao thức: udp
môi trường:
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!}
khối lượng:
php_socket:
db_socket:
caddy_data:
caddy_config:
Các Dockerfile
Nội dung:
ARG PHP_VERSION
ARG CADDY_VERSION
ARG COMPOSER_VERSION
ARG HTTP_PROXY
ARG APCU_VERSION
ARG PCOV_VERSION
ARG XDEBUG_VERSION
# Nghĩa vụ của bộ sạc tại https://stackoverflow.com/a/65044947/1374947
TỪ nhà soạn nhạc:${COMPOSER_VERSION} NHƯ nhà soạn nhạc_local
TỪ php:${PHP_VERSION}-fpm-alpine AS php
LABEL "bảo trì"="DEIL"
LABEL "phiên bản"="1.0"
LABEL "description"="Hình nền cho dự án symfony"
ARG DEBIAN_FRONTEND=không tương tác
CHẠY bản cập nhật apk; \
nâng cấp apk; \
apk thêm --no-cache \
acl \
bash \
fcgi \
tập tin \
lấy văn bản \
gnu-libiconv \
nano \
;
# cài đặt gnu-libiconv và đặt LD_PRELOAD env để làm cho iconv hoạt động hoàn toàn trên hình ảnh Alpine.
# xem https://github.com/docker-library/php/issues/240#issuecomment-763112749
ENV LD_PRELOAD /usr/lib/preloadable_libiconv.so
CHẠY bộ -eux; \
apk thêm --no-cache --virtual .build-deps \
$PHPIZE_DEPS \
icu-dev \
libzip-dev \
zlib-dev \
mysql-client\
ldb-dev \
libldap \
openldap-dev \
openldap-client \
freetype-dev \
libpng-dev \
jpeg-dev \
libjpeg-turbo-dev \
; \
\
docker-php-ext-configure zip; \
docker-php-ext-cấu hình ldap; \
docker-php-ext-install -j$(nproc) \
quốc tế \
ldap \
nén \
pdo_mysql \
chuỗi mb \
gđ \
; \
lê cấu hình thiết lập http_proxy $HTTP_PROXY; \
cài đặt pecl\
apcu-${APCU_VERSION} \
; \
\
runDeps="$( \
scanelf --needed --nobanner --format '%n#p' --recursive /usr/local/lib/php/extensions \
| tr ',' '\n' \
| sắp xếp -u \
| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
)"; \
apk thêm --no-cache --virtual .phpexts-rundeps $runDeps; \
\
apk del .build-deps; \
SAO CHÉP ./docker/php/docker-healthcheck.sh /usr/local/bin/docker-healthcheck
CHẠY chmod +x /usr/local/bin/docker-healthcheck
HEALTHCHECK --interval=10s --timeout=3s --retries=3 CMD ["docker-healthcheck"]
# Cấu hình tối ưu cho việc phát triển PHP-FPM
CHẠY ln -s $PHP_INI_DIR/php.ini-Development $PHP_INI_DIR/php.ini
SAO CHÉP docker/php/conf.d/symfony.dev.ini $PHP_INI_DIR/conf.d/symfony.ini
SAO CHÉP docker/php/php-fpm.d/zz-docker.conf /usr/local/etc/php-fpm.d/zz-docker.conf
KHỐI LƯỢNG /var/run/php
SAO CHÉP --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/ứng dụng
CHẠY bộ -eux; \
mkdir -p var/cache var/log; \
ls -tạm dừng /srv/ứng dụng; \
mkdir -p var/cache var/log; \
chmod +x bin/bảng điều khiển; đồng bộ hóa
CMD ["php-fpm"]
# Dockerfile để bao gồm xdebug
# https://github.com/dunglas/symfony-docker/blob/main/docs/xdebug.md
TỪ php NHƯ php_dev
CHẠY bộ -eux; \
apk thêm --no-cache --virtual .build-deps $PHPIZE_DEPS; \
pecl cài đặt xdebug-$XDEBUG_VERSION; \
docker-php-ext-kích hoạt xdebug; \
apk del .build-deps ; \
TỪ php dưới dạng php_test
# Ajouter la conf pour PCOV - Phạm vi mã
SAO CHÉP ./docker/php-test/pcov.ini/
CHẠY bộ -eux; \
apk thêm --no-cache --virtual .build-deps $PHPIZE_DEPS; \
pecl cài đặt pcov-${PCOV_VERSION}; \
pecl xóa bộ nhớ cache; \
docker-php-ext-kích hoạt pcov; \
con mèo /pcov.ini >> /usr/local/etc/php/conf.d/docker-php-ext-pcov.ini; \
apk del .build-deps;
WORKDIR /srv/ứng dụng
## Bản sao nguồn dans le conteneur.
## Copier le composer.json et .lock et installer les dépendances pendant le build.
SAO CHÉP --chown=www-data:www-data . .
TỪ caddy:${CADDY_VERSION}-builder-alpine AS caddy_builder
CHẠY bản dựng xcaddy \
--với github.com/dunglas/mercure \
--với github.com/dunglas/mercure/caddy \
--với github.com/dunglas/vulcain \
--với github.com/dunglas/vulcain/caddy ;
TỪ caddy:${CADDY_VERSION} NHƯ app_caddy
WORKDIR /srv/ứng dụng
SAO CHÉP --from=dunglas/mercure:v0.11 /srv/public /srv/mercure-assets/
SAO CHÉP --from=caddy_builder /usr/bin/caddy /usr/bin/caddy
SAO CHÉP --from=php /srv/app/public public/
SAO CHÉP ./docker/caddy/Caddyfile /etc/caddy/Caddyfile
Tôi không thể tạo hình ảnh và vùng chứa được liên kết; Bản dựng trả về các lỗi thất thường sau liên quan đến định dạng của phiên bản được đề cập cho hình ảnh caddy hoặc hình ảnh php :
λ docker-compose build --pull --no-cache
[+] Tòa nhà 0,2 giây (6/6) ĐÃ HOÀN THÀNH
=> [skeleton-ci_caddy internal] tải định nghĩa bản dựng từ Dockerfile 0.0s
=> => chuyển dockerfile: 32B 0,0s
=> [skeleton-ci_php internal] tải định nghĩa bản dựng từ Dockerfile 0.0s
=> => chuyển dockerfile: 32B 0,0s
=> [skeleton-ci_caddy internal] tải .dockerignore 0,0 giây
=> => chuyển ngữ cảnh: 2B 0,0 giây
=> [bộ xương-ci_php nội bộ] tải .dockerignore 0,0 giây
=> => chuyển ngữ cảnh: 2B 0,0 giây
=> ĐÃ HỦY [skeleton-ci_caddy internal] tải siêu dữ liệu cho docker.io/library/caddy:2-builder-alpine 0,0 giây
=> ĐÃ HỦY [skeleton-ci_caddy internal] tải siêu dữ liệu cho docker.io/library/caddy:2 0,0 giây
không giải quyết được: lỗi rpc: code = Unknown desc = không giải quyết được với dockerfile.v0 giao diện người dùng: không thể tạo định nghĩa LLB: không thể phân tích tên giai đoạn "php:-fpm-alpine": định dạng tham chiếu không hợp lệ
Tôi không thể xác định nguyên nhân có thể xảy ra của lỗi thất thường này và sửa nó.
Tui bỏ lỡ điều gì vậy?