【问题标题】:Docker - docker-compose 'version' doesn't have any configuration optionsDocker - docker-compose 'version' 没有任何配置选项
【发布时间】:2016-05-09 17:21:38
【问题描述】:

我是 Docker 世界的新手,我用假期来学习这个 docker(不过它比 Vagrant 难多了)。 所以我使用的是 Ubuntu 16.04,我成功安装了 docker 和 docker-compose。

我阅读了本教程:Quickstart: Docker Compose and Rails 但这不起作用...也许教程不太好。

我有这个 docker-compose.yml:

db:
    image: postgres
web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
       - .:/www/html
    ports:
       - "3000:3000"
    depends_on:
       - db

我总是收到这个错误:

$ docker-compose run web rails new . --force --database=postgresql --skip-bundle
ERROR: Validation failed in file './docker-compose.yml', reason(s):
Unsupported config option for 'web' service: 'depends_on'

嗯,好吧,我读了很多谷歌搜索结果,看来我很麻烦,因为我使用的是 Ubuntu。不幸的是,Ubuntu 中 docker 的最高版本号仅为 1.5.2。 (我尝试使用 curl 下载 1.7.1,但自动安装了 1.5.2。)

$ docker version
Client:
 Version:      1.11.1
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   5604cbe
 Built:        Tue Apr 26 23:43:49 2016
 OS/Arch:      linux/amd64

Server:
 Version:      1.11.1
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   5604cbe
 Built:        Tue Apr 26 23:43:49 2016
 OS/Arch:      linux/amd64

您有什么想法,我该如何运行基于 Rails 的 docker? 我无法安装docker机器,因为我使用的是ubuntu,安装总是会失败。

但是我的 PHP docker-compose.yml 很好,因为我可以运行它 :slight_smile: 但是这个 rails 教程不好。

【问题讨论】:

    标签: ruby-on-rails docker docker-compose


    【解决方案1】:

    原因是您删除了您所遵循的示例教程的前两行,它们确实很重要。
    因为,查看您拥有的docker 版本,您应该使用高于1.6.x 的docker-compose 版本。

    要识别这一点,您可以运行

    $ docker-compose -v
    

    在我的情况下,我得到了我

    docker-compose 版本 1.7.0,构建 0d7bf73

    如果您的版本是 1.7.x 或更高版本,那么以下信息绝对适用于您。

    这应该可以工作:

    version: '2'   ## <- this line matter and you removed it out the tutorial
    services:      ## <- this line also
        db:
            image: postgres
        web:
            build: .
            command: bundle exec rails s -p 3000 -b '0.0.0.0'
            volumes:
                - .:/www/html
            ports:
                - "3000:3000"
            depends_on:
                - db
    

    Compose 文件格式目前有三个版本:

    1. 版本 1,旧版格式。这是通过省略版本来指定的 YAML 根目录中的键。
    2. 2.x 版。这是用版本指定的:'2' 或版本:'2.1' YAML 根目录中的条目。
    3. 3.x 版,最新和推荐的版本,旨在 Compose 和 Docker 引擎的 swarm 模式之间的交叉兼容。 这是用版本指定的:'3' 或版本:'3.1' 等,条目 位于 YAML 的根目录。

    另外,这里有一点docker-composeversion / Composer 文件矩阵:

    Compose file format Docker Engine release
    3.8 19.03.0+
    3.7 18.06.0+
    3.6 18.02.0+
    3.5 17.12.0+
    3.4 17.09.0+
    3.3 17.06.0+
    3.2 17.04.0+
    3.1 1.13.1+
    3.0 1.13.0+
    2.4 17.12.0+
    2.3 17.06.0+
    2.2 1.13.0+
    2.1 1.12.0+
    2.0 1.10.0+
    1.0 1.9.1.+

    来源:https://docs.docker.com/compose/compose-file/compose-versioning/#compatibility-matrix

    • Compose 支持版本 1,直到 1.6.x。它将在未来的 Compose 版本中弃用。
    • Compose 1.6.0+ 支持版本 2 文件,并且需要 1.10.0+ 版本的 Docker 引擎。
    • 版本 2 的升级引入了仅适用于 Docker 引擎版本 1.12.0+ 的新参数
    • 2.1 版的升级引入了仅适用于 Docker 引擎 1.13.0+ 版的新参数。此版本还允许在服务配置中指定默认比例数字。
    • 为了在 Compose 和 Docker 引擎的 swarm 模式之间实现交叉兼容而设计,版本 3 删除了几个选项并增加了几个选项。

    在 docker 文档页面上,现在还有关于如何升级 Compose 文件的实用指南:

    其他有用的 docker Compose 文档:

    【讨论】:

      【解决方案2】:

      这表明您的 docker-compose 版本较低。所以,如果你在 Ubuntu 上,你可以卸载 docker-compose:

      sudo apt-get purge docker-compose
      

      然后,您可以使用以下命令重新安装最新版本:

      curl -L "https://github.com/docker/compose/releases/download/1.10.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
      

      那么,

      chmod +x /usr/local/bin/docker-compose
      

      【讨论】:

      • 这个答案解决了我的问题。我必须以sudo 运行所有三个命令,并且还必须将安装目录更改为/usr/bin/ 以使Nextcloud 正确安装
      【解决方案3】:

      除了@b.enoit.be answer

      Ubuntu(可能还有 Debian)用户:

      不要使用 apt docker-compose 包!

      如果您现在正在使用它:

      apt purge docker-compose
      

      他们的official instructions 工作得很好:

      curl -L "https://github.com/docker/compose/releases/download/1.10.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose;
      chmod +x /usr/local/bin/docker-compose;
      docker-compose --version; // docker-compose version 1.10.0, build 4bd6f1a
      

      如果您还为此使用了 apt 软件包,您可能也想先安装他们的官方 docker-engine

      【讨论】:

        【解决方案4】:

        我认为 b.enoit.be 的答案是正确的,但只是为了完整性(为了任何使用旧版本 docker-compose 的人还不能更新),应该可以使这项工作通过将depends_on 更改为links

        db:
            image: postgres
        web:
            build: .
            command: bundle exec rails s -p 3000 -b '0.0.0.0'
            volumes:
               - .:/www/html
            ports:
               - "3000:3000"
            links:
               - db
        

        这是因为depends_on只是在新版本的docker-compose格式中增加了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-01-17
          • 2021-12-27
          • 1970-01-01
          • 2015-10-24
          • 2022-11-02
          相关资源
          最近更新 更多