Điểm:0

Docker-compose đọc thông số thất thường

lá cờ co

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?

lá cờ vn
https://docs.docker.com/engine/reference/builder/#scope "Một lệnh ARG nằm ngoài phạm vi ở cuối giai đoạn xây dựng nơi nó được xác định. Để sử dụng một đối số trong nhiều giai đoạn, mỗi giai đoạn phải bao gồm lệnh ARG."
Raymond avatar
lá cờ co
Cảm ơn, tôi đang xem xét dockerfile cho phù hợp.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.