bounty还有3天到期。回答此问题可获得+100声望奖励。drakpasanger正在寻找一个答案从一个有信誉的来源。
我一直在尝试在我的Ubuntu 22.04上Dockerizing Magento 2.4.3-p2。所以这里是我
`docker-compose.yml
version: '3.0'
services:
nginx:
build:
context: .
dockerfile: docker/nginx/dockerfile
ports:
- '8000:80'
volumes:
- ./docker/nginx/conf.d:/etc/nginx/conf.d
- ./src:/var/www/html
restart: always
php-fpm:
build:
context: .
dockerfile: docker/php/dockerfile
volumes:
- ./src:/var/www/html
depends_on:
- nginx
db:
image: mariadb:10.4.13
ports:
- 3300:3306
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=magento
- MYSQL_USER=magento
- MYSQL_PASSWORD=magento
volumes:
- dbdata:/var/lib/mysql
depends_on:
- nginx
- php-fpm
redis:
image: redis:6.2-alpine
ports:
- "6379:6379"
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.10.0
ports:
- "9200:9200"
environment:
- discovery.type=single-node
memcached:
image: memcached:1.5
ports:
- "11211:11211"
varnish:
image: varnish:latest
ports:
- "8080:80"
depends_on:
- nginx
composer:
image: composer:2.3
volumes:
- ./magento:/var/www/html
working_dir: /var/www/html
volumes:
dbdata:`
`nginx dockerfile
FROM nginx:1.18.0-alpine-perl
ARG APP_ID=1000
RUN addgroup -g "$APP_ID" app \
&& adduser -G app -u "$APP_ID" -h /var/www/html -s /bin/bash -S app
RUN touch /var/run/nginx.pid
RUN mkdir /sock
USER app:app
VOLUME /var/www/html
WORKDIR /var/www/html`
`Nginx conf文件
server {
listen 80;
server_name loaclhost
root /var/www/html; # Magento root directory
index index.php;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass php-fpm:9000; # Connect to PHP-FPM container
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
}
`` Php dockerfile
FROM php:7.4.0-fpm-buster
ARG APP_ID=1000
RUN groupadd -g "$APP_ID" app \
&& useradd -g "$APP_ID" -u "$APP_ID" -d /var/www/html -s /bin/bash app
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
libwebp-dev \
libxpm-dev \
libzip-dev \
libicu-dev \
libmcrypt-dev \
libxslt-dev \
libxslt1-dev \
libcurl4-openssl-dev \
libxml2-dev \
libonig-dev \
unzip \
git \
nano \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp --with-xpm \
&& docker-php-ext-install -j$(nproc) gd \
&& docker-php-ext-configure intl \
&& docker-php-ext-install -j$(nproc) intl \
&& docker-php-ext-install -j$(nproc) pdo_mysql \
&& docker-php-ext-install -j$(nproc) xsl \
&& docker-php-ext-install -j$(nproc) zip \
&& docker-php-ext-install -j$(nproc) bcmath \
&& docker-php-ext-install -j$(nproc) soap \
&& docker-php-ext-install -j$(nproc) sockets
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
COPY . /var/www/html
EXPOSE 9000
CMD ["php-fpm"]
WORKDIR /var/www/html`
我把每个集装箱都检查了一遍。但是当我运行sudo docker run --rm -it --volume $(pwd)/src:/var/www/html composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition=2.4.3-p2 . --ignore-platform-req=ext-intl
时
在本地安装Magento。我得到一个错误。Problem 1 - Root composer.json requires magento/product-community-edition 2.4.3-p2 -> satisfiable by magento/product-community-edition[2.4.3-p2]. - magento/product-community-edition 2.4.3-p2 requires php ~7.3.0||~7.4.0 -> your php version (8.2.10) does not satisfy that requirement.
虽然我在我的设置中使用了php:7.4.0-fpm-buster。为了避免confit,我也从本地机器上清除了PHP。我应该怎么做才能解决这个问题?
1条答案
按热度按时间nkcskrwz1#
有多种方法可以解决与容器化编写器调用的PHP平台版本不匹配的错误。
在回答您的问题中的初始composer项目配置创建语句时,我能够找到(
composer create-project
),添加--ignore-platform-reqs
命令行参数应该可以防止错误消息。通常情况下,当您调用composer容器化时,它使用的是容器配置的PHP版本(8.2.10),而不是使用不同的(预期的,更老的7.x PHP版本),该版本可能在不同的容器中,但composer无法检测到,因为Composer已经容器化,并且在这种隔离级别下,composer无法获得任何不同于容器化的PHP版本,并且无法从容器环境中推断**。
然而,有命令行参数/环境参数和composer.json项目(甚至可能是全局)配置设置,可以让你使用命令Composer不依赖于推理,而是坚持你的命令和/或PHP版本和任何其他平台包的配置(也许有点超出你的问题的范围:也包括任何项目包)。
请参阅Composer文档,了解所有composer命令行参数,环境参数(通常称为环境变量),整个composer.json架构以及最后但并非最不重要的所有配置和选项。
您可能还希望遵循构建容器的模式,使用多阶段构建,即使用您的目标PHP的生产版本作为平台版本,将composer.phar(或其等效的可执行文件)复制到容器化构建环境中,在那里创建项目,然后最后将实际结果从该阶段复制到您想要准备挂载的最终映像中。Mind认为您正在匹配您在这里尝试执行的挂载策略,因为根据Mind的类型和挂载顺序,您可能需要应用文件复制操作(例如:在tarball中准备)* 在 * 安装之后。
基于docker-compose.yml的配置应该为您提供所有选项,无论您尝试遵循哪种构建模式,即使您使用的是有点过时的docker版本,只要注意您能够使用docker compose V2。
对于Composer和PHP,请记住容器化,也就是说,
docker run
将始终位于自己的容器中,并且只能是它提供的映像。