如何验证我的 docker-compose.yml?

Posted

技术标签:

【中文标题】如何验证我的 docker-compose.yml?【英文标题】:How to verify my docker-compose.yml? 【发布时间】:2016-01-02 06:37:25 【问题描述】:

我正在使用 docker-compose 设置一个容器堆栈。然而通过运行

docker-compose up

我收到一条相当神秘的错误消息:

Traceback (most recent call last):
  File "/usr/local/bin/docker-compose", line 9, in <module>
    load_entry_point('docker-compose==1.4.2', 'console_scripts', 'docker-compose')()
  File "/usr/local/lib/python2.7/dist-packages/compose/cli/main.py", line 39, in main
    command.sys_dispatch()
  File "/usr/local/lib/python2.7/dist-packages/compose/cli/docopt_command.py", line 21, in sys_dispatch
    self.dispatch(sys.argv[1:], None)
  File "/usr/local/lib/python2.7/dist-packages/compose/cli/command.py", line 27, in dispatch
    super(Command, self).dispatch(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/compose/cli/docopt_command.py", line 24, in dispatch
    self.perform_command(*self.parse(argv, global_options))
  File "/usr/local/lib/python2.7/dist-packages/compose/cli/command.py", line 57, in perform_command
    verbose=options.get('--verbose'))
  File "/usr/local/lib/python2.7/dist-packages/compose/cli/command.py", line 78, in get_project
    config.load(config_details),
  File "/usr/local/lib/python2.7/dist-packages/compose/config.py", line 138, in load
    for service_name, service_dict in list(dictionary.items()):
AttributeError: 'NoneType' object has no attribute 'items'

如何调试?我检查了 yml 是否有效,但它不起作用。

【问题讨论】:

【参考方案1】:

我忘记保存我的docker-compose.yml,所以它是空的。

我偶然发现了this issue about making the error message better 中描述行为的解决方案。

如果根本不存在docker-compose.yml,则会收到一条好消息:

Can't find a suitable configuration file in this directory or any parent. Are you in the right directory?
Supported filenames: docker-compose.yml, docker-compose.yaml, fig.yml, fig.yaml

anounced on the docker-compose's issue list 在即将发布的 1.5 版本中会有更好的错误消息:

Top level object needs to be a dictionary. Check your .yml file that
you have defined a service at the top level.

从 1.7.1 版开始,指示您的文件为空的错误消息如下:

ERROR: Top level object in './docker-compose.yml' needs to be an
object not '<type 'NoneType'>'.

鉴于最新版本,错误消息非常简单:

$ docker -v
Docker version 19.03.13, build 4484c46d9d
$ docker build .
failed to solve with frontend dockerfile.v0: failed to create LLB definition: the Dockerfile cannot be empty

因此,为了便于使用,请考虑升级您的 docker 引擎。

【讨论】:

天哪,我不敢相信我也忘了点击保存。 @CodyReichert 考虑升级 docker-compose,以获得更易读的错误消息。 哈哈。也没有点击保存。很好地完成了这个答案。彻底。 我在搜索错误时也忘了保存和登陆这里。哈哈

以上是关于如何验证我的 docker-compose.yml?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复我的 docker-compose.yml? - 预期 <block end>,但发现 '<block mapping start>'

如何使用 docker-compose.yml 和 ecs-cli 将 EBS 卷附加到我的容器

向 docker-compose.yml 公开随机端口

如何从 docker-compose.yml 更改 docker-compose.yml 中已安装卷的权限?

如何在 docker-compose.yml 中重建 docker 容器?

如何在 docker-compose.yml 中开始测试之前等待数据库迁移完成