Docker部署WordPress导入脚本装WP-CLI遇YAML语法错误求助
解决Docker Compose中安装WP-CLI的YAML语法错误与正确方案
嘿,作为Docker新手碰到这种YAML语法错误确实挺闹心的,我来帮你捋清楚问题出在哪,以及怎么解决。
首先,你的错误根源
你遇到的yaml.scanner.ScannerError本质是把Dockerfile的专属指令COPY直接写到了docker-compose.yml里。这俩是完全不同的工具:
COPY是Dockerfile的指令,仅在构建镜像时用来复制本地文件到镜像内;- docker-compose.yml是用来定义容器运行环境的配置文件,根本不认识
COPY这个配置字段,所以YAML解析器找不到对应的键值对格式(缺少冒号),直接报错。
方案一:自定义带WP-CLI的WordPress镜像(推荐,长期稳定)
这个方法会构建一个预装WP-CLI的WordPress镜像,以后启动容器时直接用这个镜像,WP-CLI会一直存在。
- 在你的项目根目录下创建
Dockerfile文件,内容如下:
FROM wordpress:latest # 把本地的install.sh复制到容器临时目录 COPY install.sh /tmp/install.sh # 赋予脚本执行权限并运行,最后清理脚本 RUN chmod +x /tmp/install.sh && /tmp/install.sh && rm /tmp/install.sh
- 确保你的
install.sh脚本和Dockerfile、docker-compose.yml在同一目录,脚本内容不变:
echo "Installing WP-CLI" curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar chmod +x wp-cli.phar mv wp-cli.phar /usr/local/bin/wp
- 修改docker-compose.yml,将原来的
image: wordpress:latest替换为build: .(表示基于当前目录的Dockerfile构建镜像):
version: '3.1' services: wordpress: depends_on: - db # 替换为构建本地镜像的配置 build: . volumes: - wordpress_files:/var/www/html ports: - "8080:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: user WORDPRESS_DB_PASSWORD: password WORDPRESS_DB_NAME: wordpressdb db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_RANDOM_ROOT_PASSWORD: 1 MYSQL_DATABASE: wordpressdb MYSQL_USER: user MYSQL_PASSWORD: password volumes: wordpress_files: db_data:
- 执行构建并启动容器:
docker-compose up --build -d
方案二:容器启动后临时安装WP-CLI(适合快速测试)
如果不想构建镜像,也可以在容器运行后手动安装WP-CLI,缺点是容器重启后WP-CLI会消失:
- 先正常启动原有环境:
docker-compose up -d
- 进入WordPress容器执行安装命令:
docker-compose exec wordpress bash # 进入容器后依次执行 echo "Installing WP-CLI" curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar chmod +x wp-cli.phar mv wp-cli.phar /usr/local/bin/wp # 验证安装是否成功 wp --version
额外提醒
docker-compose.yml对缩进要求非常严格,必须用空格(不能用Tab键),且每个层级的缩进要统一(比如每个子项缩进2个或4个空格),这也是常见的YAML语法错误诱因,以后修改配置时要注意哦。
内容的提问来源于stack exchange,提问作者cheeze yes
相关产品推荐
相关产品推荐

