wordpress - 如何在docker-compose.yml中运行wp cli

标签 wordpress docker docker-compose dockerfile

只是在这里从docker开始

所以我在 docker-compose.yml 中得到了这个

version: '3.3'

services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - 8000:80
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_TABLE_PREFIX: "wp_"
      WORDPRESS_DEBUG: 1

  wordpress-cli:
    depends_on:
      - db
      - wordpress
    image: wordpress:cli
    command: wp core install --path="/var/www/html" --url=localhost --title="Local Wordpress By Docker" --admin_user=admin --admin_password=secret --admin_email=foo@bar.com

volumes:
  db_data:

因此,我想运行 wp核心安装,这样就不必手动完成的过程来设置测试Wordpress网站。

但是,当我运行 docker-compose up 时,这似乎不起作用,我在控制台上收到此错误

enter image description here

我在这里想念什么?任何人都可以帮助我实现自动化设置wordpress install的目标吗?

提前致谢

最佳答案

好吧,这里有两个问题。第一个是这两个容器(wordpresswordpress-cli)不共享卷。因此,尽管wordpress已准备好安装wordpress,但wordpress-cli尚未安装。

因此,您可以将卷添加到两个容器中,然后wordpress-cli将找到wordpress安装。

然后还有另一个问题:wordpress:latestwordpress:cli图像都与用户www-data一起运行,但是问题在于各个www-data用户具有不同的用户ID:

$ docker run --rm wordpress:latest grep www-data /etc/passwd 
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
$ docker run --rm wordpress:cli grep www-data /etc/passwd   
www-data:x:82:82:Linux User,,,:/home/www-data:/bin/false

似乎它们在这里并不完全兼容。因此,如果您使用共享卷,则必须确保它们都使用相同的用户ID。我通过让wordpress:cli与用户xfs一起运行(用户ID为33)解决了这个问题。

最后一个问题是您的容器彼此依赖。 Wordpress需要一个正在运行的MySQL实例,而wordpress-cli也需要MySQL和Wordpress准备就绪。为了确保MySQL准备好安装wordpress cli,您可以使用"wait-for-it"之类的东西,或者在简单的情况下,您可以等待几秒钟,然后再尝试。

我已经测试了所有这些更改,并提出了以下docker-compose.yml。我已经注释了对“vstm”所做的所有更改:
version: "3.3"
services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - 8000:80
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_TABLE_PREFIX: "wp_"
      WORDPRESS_DEBUG: 1
    # vstm: add shared volume
    volumes:
      - wp_data:/var/www/html

  wordpress-cli:
    depends_on:
      - db
      - wordpress
    image: wordpress:cli
    # vstm: This is required to run wordpress-cli with the same
    # user-id as wordpress. This way there are no permission problems
    # when running the cli
    user: xfs
    # vstm: The sleep 10 is required so that the command is run after
    # mysql is initialized. Depending on your machine this might take
    # longer or it can go faster.
    command: >
      /bin/sh -c '
      sleep 10;
      wp core install --path="/var/www/html" --url="http://localhost:8000" --title="Local Wordpress By Docker" --admin_user=admin --admin_password=secret --admin_email=foo@bar.com
      '
    # vstm: add shared volume
    volumes:
      - wp_data:/var/www/html

volumes:
  db_data:
  # vstm: add shared volume
  wp_data:

它使用docker-volume,但您也可以将其映射到文件系统。取决于您计划如何使用docker-compose。

关于wordpress - 如何在docker-compose.yml中运行wp cli,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50999848/

相关文章:

jquery - 如何使用 jquery 设计两类 css

php - 对单个页面的不同图像使用 Backstretch

apache - Docker内部的慢速apache + mysql

reactjs - 部署具有dockerized前端和dockerise后端镜像的应用程序

Docker-compose 和 Docker-swarm

docker - 运行多个 podman 容器,例如 docker-compose

Wordpress - 获取自定义分类中的帖子

wordpress - wp rest api 每页每个类别帖子

docker - 无法在 docker 容器中设置 ulimit

docker - go dep 不在 docker-compose 上运行