【问题标题】:Composer not installing wordpress plugins through dockerfileComposer 没有通过 dockerfile 安装 wordpress 插件
【发布时间】:2019-09-12 05:08:40
【问题描述】:

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

我尝试包含我认为相关的文件

文件结构

/
 config/
   /composer/
      Dockerfile
      composer.json
   /wordpress/Dockerfile
   /database/Dockerfile
   /phpmyadmin/Dockerfile

 dist/
   /wp-content/
      /themes/
      /plugins/
      /uploads/

docker-composer.yml

composer.json

{
  "repositories":[
    {
        "type":"composer",
        "url":"https://wpackagist.org"
    }
  ],
  "require": {
    "wpackagist-plugin/akismet":"dev-trunk",
    "wpackagist-plugin/wordpress-seo":">=7.0.2",
    "wpackagist-theme/hueman":"*"
  }
}

Dockerfile 编写器

FROM composer/composer:php7

# 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

Dockerfile Wodrpess

# start with the latest wordpress and php image
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

# Expose a port to run on
EXPOSE 80

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

docker-compose.yml

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: {}

【问题讨论】:

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

标签: docker-compose composer-php dockerfile


【解决方案1】:

正如我在评论中所解释的,您需要重新安排您的项目。

composer 文件夹和服务可能会消失。将文件夹 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

docker-compose.yml 现在可以这样简化:

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: {}

我希望这对你有用。否则让我知道错误,我会查看它。

【讨论】:

  • 非常感谢您提供的示例。这对我有用!
猜你喜欢
  • 2013-05-29
  • 1970-01-01
  • 2019-02-10
  • 1970-01-01
  • 2018-08-10
  • 2014-12-25
  • 2016-05-11
  • 2014-06-09
  • 2017-09-30
相关资源
最近更新 更多