Docker compose 编写器未通过dockerfile安装wordpress插件

Docker compose 编写器未通过dockerfile安装wordpress插件,docker-compose,composer-php,dockerfile,Docker Compose,Composer Php,Dockerfile,我正在使用docker compose构建wordpress环境。我的计划是使用composer安装我需要的插件和主题。当我运行docker compose build时,一切都很好,没有问题。当我运行docker compose up时,我看到所有容器都在运行,包括composer。当我导航到wordpress构建时,只安装了默认主题和插件。我的问题是为什么没有安装我的插件和主题。我错过了什么 我试着把我认为相关的文件包括进去 文件结构 composer.json Dockerfile作曲家

我正在使用docker compose构建wordpress环境。我的计划是使用composer安装我需要的插件和主题。当我运行docker compose build时,一切都很好,没有问题。当我运行docker compose up时,我看到所有容器都在运行,包括composer。当我导航到wordpress构建时,只安装了默认主题和插件。我的问题是为什么没有安装我的插件和主题。我错过了什么

我试着把我认为相关的文件包括进去

文件结构

composer.json

Dockerfile作曲家

Dockerfile Wodrpess

Dockerfile数据库

docker-compose.yml


正如我在评论中解释的,你需要重新安排一下你的项目

composer文件夹和服务可能会消失。将文件夹生成器的内容移动到wordpress文件夹中

wordpress文件夹中的Dockerfile应该如下所示:

FROM composer/composer:php7 as build

# Install composer
WORKDIR /var/www/html/wp-content

RUN curl -sS https://getcomposer.org/installer | \
    php -- --install-dir=/usr/bin/ --filename=composer

COPY composer.json /var/www/html/wp-content
# COPY composer.lock ./
RUN composer install --no-scripts --no-autoloader
# COPY ./ /var/www/
RUN composer dump-autoload --optimize

FROM wordpress:5.1.1-php7.3-apache

# Set our environment variables for logging into wordpress
ENV WORDPRESS_DB_HOST database:3306
ENV WORDPRESS_DB_USER username
ENV WORDPRESS_DB_PASSWORD password

COPY --from=build /var/www/html/wp-content /var/www/html/wp-content

# Expose a port to run on
EXPOSE 80
version: "3.3"
services:
  wordpress:
    build:
      context: ./config/docker/wordpress
    ports:
      - "8080:80"
    restart: always
    working_dir: /var/www/html
    depends_on:
      - database
  database:
    build:
      context: ./config/docker/database
    volumes:
      - datab:/var/lib/mysql
    restart: always
  phpmyadmin:
    build:
        context: ./config/docker/phpmyadmin
    ports:
      - 8181:80
    restart: always
    depends_on:
      - database
volumes:
    datab: {}
docker-compose.yml现在可以简化为:

FROM composer/composer:php7 as build

# Install composer
WORKDIR /var/www/html/wp-content

RUN curl -sS https://getcomposer.org/installer | \
    php -- --install-dir=/usr/bin/ --filename=composer

COPY composer.json /var/www/html/wp-content
# COPY composer.lock ./
RUN composer install --no-scripts --no-autoloader
# COPY ./ /var/www/
RUN composer dump-autoload --optimize

FROM wordpress:5.1.1-php7.3-apache

# Set our environment variables for logging into wordpress
ENV WORDPRESS_DB_HOST database:3306
ENV WORDPRESS_DB_USER username
ENV WORDPRESS_DB_PASSWORD password

COPY --from=build /var/www/html/wp-content /var/www/html/wp-content

# Expose a port to run on
EXPOSE 80
version: "3.3"
services:
  wordpress:
    build:
      context: ./config/docker/wordpress
    ports:
      - "8080:80"
    restart: always
    working_dir: /var/www/html
    depends_on:
      - database
  database:
    build:
      context: ./config/docker/database
    volumes:
      - datab:/var/lib/mysql
    restart: always
  phpmyadmin:
    build:
        context: ./config/docker/phpmyadmin
    ports:
      - 8181:80
    restart: always
    depends_on:
      - database
volumes:
    datab: {}

我希望这对你有用。否则,请告诉我错误,我会查看它。

composer服务实际上不需要运行,因为它在构建期间完成了所有工作。在构建时,您在docker compose中执行的卷映射不可用。我建议对wordpress服务使用多阶段构建:第一阶段应该是撰写dockerfile的撰写部分,第二阶段应该将/var/www/html/wp内容复制到wordpress图像中,并继续在wordpress dockerfile中进行任何工作。Hi@Mihai感谢您的回复。你有没有这样的例子?我从docker compose文件中删除了composer服务。首先,我运行了composer docker文件来安装composer,但第二部分我对复制的内容感到困惑。谢谢你的帮助好的,你能发布你正在使用的wordpress Dockerfile吗?我已经用wordpress和数据库Dockerfile更新了我的问题非常感谢你的例子。这对我有用!
# start with the mysql image
FROM mysql:5.7

# Set our environment varibales for logging into the DB
ENV MYSQL_ROOT_PASSWORD UKoBMndyEY
ENV MYSQL_DATABASE wordpress
ENV MYSQL_USER username
ENV MYSQL_PASSWORD password

# Copy the database table dependencies into our image DB
COPY  ./includes /docker-entrypoint-initdb.d

# Expose a port to run on
EXPOSE 3306:3306
version: "3.3"
services:
  wordpress:
    build:
      context: ./config/docker/wordpress
    volumes:
      - ./dist/wp-content:/var/www/html/wp-content
    ports:
      - "8080:80"
    restart: always
    working_dir: /var/www/html
    depends_on:
      - database
  database:
    build:
      context: ./config/docker/database
    volumes:
      - datab:/var/lib/mysql
    restart: always
  composer:
    build:
      context: ./config/docker/composer
    restart: 'no'
    image: "composer"
    volumes:
      - ./dist/wp-content:/var/www/html/wp-content
  phpmyadmin:
    build:
        context: ./config/docker/phpmyadmin
    ports:
      - 8181:80
    restart: always
    depends_on:
      - database
volumes:
    datab: {}
FROM composer/composer:php7 as build

# Install composer
WORKDIR /var/www/html/wp-content

RUN curl -sS https://getcomposer.org/installer | \
    php -- --install-dir=/usr/bin/ --filename=composer

COPY composer.json /var/www/html/wp-content
# COPY composer.lock ./
RUN composer install --no-scripts --no-autoloader
# COPY ./ /var/www/
RUN composer dump-autoload --optimize

FROM wordpress:5.1.1-php7.3-apache

# Set our environment variables for logging into wordpress
ENV WORDPRESS_DB_HOST database:3306
ENV WORDPRESS_DB_USER username
ENV WORDPRESS_DB_PASSWORD password

COPY --from=build /var/www/html/wp-content /var/www/html/wp-content

# Expose a port to run on
EXPOSE 80
version: "3.3"
services:
  wordpress:
    build:
      context: ./config/docker/wordpress
    ports:
      - "8080:80"
    restart: always
    working_dir: /var/www/html
    depends_on:
      - database
  database:
    build:
      context: ./config/docker/database
    volumes:
      - datab:/var/lib/mysql
    restart: always
  phpmyadmin:
    build:
        context: ./config/docker/phpmyadmin
    ports:
      - 8181:80
    restart: always
    depends_on:
      - database
volumes:
    datab: {}