Docker – docker-compose'version'没有任何configuration选项

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

我阅读本教程: 快速入门:Docker的撰写和铁路但这不工作…也许教程不好。

我有这个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 

你有什么想法,我怎么能运行基于轨道的docker? 我无法安装docker机器,因为我使用的是Ubuntu,安装总是失败。

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

原因是你删除了你正在关注的示例教程的两个第一行,而且他们确实很重要。
因为,看着docker版本,你应该使用docker docker-compose版本高于1.6.x的版本。

要识别这个,你可以运行

 $ docker-compose -v 

在我的情况下,让我

docker-compose 1.7.0版,build 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. 这是在YAML根目录下的一个版本:“2”或版本:“2.1”条目指定的。
  3. 版本3.x是最新和推荐的版本,旨在在Compose和Docker Engine的swarm模式之间交叉兼容。 这是指定一个版本:“3”或版本:“3.1”等,input在YAML的根。

此外,这里是一个小docker-compose版本/composer php文件matrix:

撰写文件格式|  Docker引擎发布
 -------------------- | ----------------------
 3.0;  3.1 |  1.13.0+
 2.1 |  1.12.0+
 2.0 |  1.10.0+
 1.0 |  1.9.1。+

来源: 从docker文件

  • 版本1由Compose支持1.6.x. 它将在未来的Compose版本中被弃用。
  • 版本2文件由Compose 1.6.0+支持,并且需要版本1.10.0以上的Docker引擎。
  • 引入仅在Docker引擎版本1.12.0以上提供的新参数的版本2的升级
  • 2.1版本的升级,引入了仅在Docker引擎版本1.13.0以上提供的新参数。 该版本还允许指定服务configuration中的默认缩放编号。
  • 为了在Compose和Docker Engine的swarm模式之间交叉兼容,版本3删除了几个选项,并添加了更多。

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

  • 一个从1升级到2.x
  • 一个从2.x升级到3.x

其他有用的docker撰写文档:

  • 所有docker组成版本的列表
  • 撰写文件版本1
  • 撰写文件版本2
  • 撰写文件版本3(当前)

这表明你的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 

我认为从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只在depends_on -compose格式的新版本中添加了。

除了@ b.enoit.be回答 :

Ubuntu (也可能是Debian )用户:

不要使用apt docker-compose软件包!

如果您现在正在使用它:

 apt 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; docker-compose --version; // docker-compose version 1.10.0, build 4bd6f1a 

你也可以先安装官方的docker-engine ,如果你也使用apt套件的话。