无法启动docker-compose:运行compose报wordpress.build类型无效错误
Docker Compose 报错排查与修复
你遇到的这条语法校验报错,本质是YAML结构不符合Compose的解析规则,除了提示的build字段问题,还有几处隐藏的配置错误会导致后续启动失败,逐一修复即可:
核心报错修复
报错提示services.wordpress.build contains an invalid type,直接对应你配置里wordpress服务下的build:字段:
- 这个字段冒号后面完全没有赋值,YAML会将其解析为空值类型,但Compose对该字段的要求是必须为字符串(填写Dockerfile所在的构建上下文路径,和你db服务的
build: ./db写法一致),或者对象(包含构建上下文、Dockerfile文件名等参数的配置块),空值类型直接无法通过校验。 - 修复方式二选一:
- 如果你需要基于本地的Dockerfile构建wordpress镜像,就给build补全路径,比如写
build: ./wordpress - 如果你直接使用官方公开的wordpress镜像,直接删掉这个空的
build:字段,换成image: wordpress:latest即可
- 如果你需要基于本地的Dockerfile构建wordpress镜像,就给build补全路径,比如写
其他隐藏配置错误(修复完build后会遇到的连带问题)
这些问题不是触发当前报错的原因,但会导致容器启动失败,需要一并修正:
- db服务的卷挂载路径错误:你写的是
/var/lib.mysql,官方MySQL镜像的实际数据目录是/var/lib/mysql(是斜杠连接路径层级,不是点),路径错误会导致数据库无法持久化存储。 - 网络配置名不匹配:你在顶层
networks块里定义的网络键是website_networks(带s),但在db和wordpress服务里实际引用的网络名是website_network(不带s),Compose会直接提示找不到对应网络。 - 网络别名冲突:db和wordpress两个服务在同一个网络下都配置了别名
wordpress,会造成DNS解析冲突;且你wordpress配置的数据库主机是db:3306,对应的db服务应该把网络别名设为db,否则wordpress根本无法解析到数据库的地址。
修复完成的可运行配置示例
version: "3.7" services: db: build: ./db container_name: db ports: - "3306:3306" volumes: - db_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: Test123 MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: Test123 networks: website_network: aliases: - db wordpress: # 二选一:本地构建写build路径,用官方镜像写image配置 image: wordpress:latest container_name: wordpress_new ports: - "80:80" networks: website_network: aliases: - wordpress environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: Test123 WORDPRESS_DB_NAME: wordpress networks: website_network: name: website_network volumes: db_data: driver: local name: db_data
内容的提问来源于stack exchange,提问作者Quentin Fabrie
相关产品推荐
相关产品推荐

