Docker组合php-fpm,nginx,mysql,并在nginx上使用wp-cli

我将3个独立的容器连接在一起:

  • nginx的:1.10高山
  • PHP:7.0.6-FPM-高山
  • MariaDB的:5.5

我的目标是在将源代码复制到nginx容器之前运行wp-cli安装。

问题:

  1. 试图从Dockerfile(my-nginx图像)运行wp-cli的安装脚本工作正常,但是当我尝试运行任何wp-cli命令时,它将返回错误: env: can't execute 'php': No such file or directory
  2. wp-cli安装脚本(与正确的依赖关系)也适用于dockerfile.php-fpm(my-php image),它也返回一个错误: Error: YIKES! It looks like you're running this as root. You probably meant to run this as the user that your WordPress install exists under. Error: YIKES! It looks like you're running this as root. You probably meant to run this as the user that your WordPress install exists under. 并提供给我运行这个命令的标志–allow-root,在这种情况下很糟糕,因为我想使用wp用户权限。 或以另一个用户身份运行此命令。

核心configuration

泊坞窗,compose.yml:

 version: '2' services: my-nginx: build: . volumes: - .:/var/www/html ports: - "8080:80" links: - my-php - my-mysql my-php: build: context: . dockerfile: Dockerfile.php-fpm volumes: - .:/var/www/html ports: - "9000:9000" my-mysql: image: mariadb:5.5 volumes: - /var/lib/mysql 

nginx.conf:

 server { server_name _; listen 80 default_server; root /var/www/html; index index.php index.html; access_log /dev/stdout; error_log /dev/stdout info; location / { try_files $uri $uri/ /index.php?$args; } location ~ .php$ { include fastcgi_params; fastcgi_pass my-php:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } 

wp-cli集成是从https://github.com/conetix/docker-wordpress-wp-cli

选项1

Dokerfile:

 FROM nginx:1.10-alpine # add root dir RUN mkdir -p /var/www/html WORKDIR /var/www/html ENV WP_ROOT /var/www/html # Install requirements for wp-cli support RUN apk update \ && apk add less mysql-client sudo curl # copy nginx configuration COPY nginx.conf /etc/nginx/conf.d/default.conf # Add WP-CLI RUN curl -o /bin/wp-cli.phar https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar COPY wp-su.sh /bin/wp RUN chmod +x /bin/wp-cli.phar \ && sudo mv /bin/wp-cli.phar /usr/local/bin/wp RUN wp core download --allow-root # copy all files for current dir (should be theme or plugin folder) COPY . ./ 

Dockergile.php-FPM

 FROM php:7.0.6-fpm-alpine VOLUME /var/www/html RUN docker-php-ext-install -j $(grep -c ^processor /proc/cpuinfo 2>/dev/null || 1) iconv gd mbstring fileinfo curl xmlreader xmlwriter mysqli 

选项2

Dokerfile:

 FROM nginx:1.10-alpine # add root dir RUN mkdir -p /var/www/html WORKDIR /var/www/html RUN apk update \ && apk add less mysql-client sudo # copy nginx configuration COPY nginx.conf /etc/nginx/conf.d/default.conf # copy all files for current dir (should be theme or plugin folder) COPY . ./ 

Dockergile.php-FPM

 FROM php:7.0.6-fpm-alpine VOLUME /var/www/html RUN docker-php-ext-install -j $(grep -c ^processor /proc/cpuinfo 2>/dev/null || 1) iconv gd mbstring fileinfo curl xmlreader xmlwriter mysqli # Install requirements for wp-cli support RUN apk update \ && apk add curl sudo less ENV WP_ROOT /var/www/html # Add WP-CLI RUN curl -o /bin/wp-cli.phar https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar COPY wp-su.sh /bin/wp RUN chmod +x /bin/wp-cli.phar \ && sudo mv /bin/wp-cli.phar /usr/local/bin/wp RUN wp core download 

一般的问题:

  1. docker工人用户的最佳做法是什么?
  2. wp-cli集成从https://github.com/conetix/docker-wordpress-wp-cli/blob/master/wp-su.sh使用www数据用户 – 我应该添加这个用户到我的docker,如果是的话 – 要一个吗? ngnix或php-fpm以及为什么。
  3. 从php-fpm容器设备运行wp donlowd核心,就好像它下载文件一样,但是当我尝试执行时,它的运行,没有这个文件显示在/ var / www / html。 有没有一定的方法来订购图像文件的安装?
  4. 为什么'php'是不可用的命令从我的nginx如果我卷
    我的PHP图像? 我必须在这个图像上安装PHP?

PHP没有安装在你的nginx容器中。 我认为它不应该安装在那里。 使用你的php fpm容器来运行WP CLI。 以下是我如何使用类似的设置来运行WP CLI:

泊坞窗,compose.yml:

 version: '2' services: mysql: image: mysql:latest volumes: - "../.data/db:/var/lib/mysql" restart: always environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: my_database MYSQL_USER: my_user MYSQL_PASSWORD: password phpfpm: depends_on: - mysql image: my/phpfpm:latest build: ./docker/php-fpm volumes: - ".:/var/www/html" - "./docker/php-fpm/php.ini:/usr/local/etc/php/php.ini" - "./docker/php-fpm/xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini" links: - mysql restart: always extra_hosts: - "mysite.dev:172.18.0.1" # Use the gateway address for your docker network for the ip address. This is so that PHP FPM can find nginx for the postback to do things like cron jobs with WordPress nginx: depends_on: - phpfpm ports: - "80:80" image: nginx:latest volumes: - ".:/var/www/html" - "./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf" links: - phpfpm restart: always 

泊坞窗/ PHP-FPM / Dockerfile:

 FROM php:5.5-fpm ARG INSTALL_XDEBUG=true ENV INSTALL_XDEBUG ${INSTALL_XDEBUG} RUN if [ ${INSTALL_XDEBUG} = true ]; then \ pecl install xdebug && \ docker-php-ext-enable xdebug \ ;fi RUN apt-get update && apt-get install -y libz-dev libmemcached-dev libjpeg-dev libpng-dev \ && pecl install memcached \ && docker-php-ext-enable memcached \ && docker-php-ext-install -j$(nproc) pdo pdo_mysql mysqli gd \ && docker-php-ext-enable pdo pdo_mysql mysqli gd RUN docker-php-ext-install zip \ && docker-php-ext-enable zip RUN curl https://getcomposer.org/download/1.2.0/composer.phar > /tmp/composer.phar \ && chmod +x /tmp/composer.phar \ && mv /tmp/composer.phar /usr/local/bin/composer \ && apt-get update && apt-get install -y less \ && curl https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar > /tmp/wp-cli.phar \ && chmod +x /tmp/wp-cli.phar \ && mv /tmp/wp-cli.phar /usr/local/bin/wp CMD ["php-fpm"] EXPOSE 9000 

我也使用一个memcached容器,所以这就是为什么dockerfile也安装memcached扩展。 重要的部分是它安装WP CLI的地方并将其移动到位。 您也可以通过在dockerfile中更改它来修改安装的PHP版本。 在使用安装在PHP上的WP CLI启动并运行群集后,可以运行以下命令在容器中运行wp cli命令:

 docker exec -u www-data <container_name> wp ... # whatever command after that 

我有已经有容器名称的不同项目的别名:

 alias mywp="docker exec -u www-data mysite_phpfpm_1 wp" 

并让我运行这样的wp命令:

 mywp core update-db --network mywp post meta list 2119