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,传统格式。 这是通过省略YAML根目录下的版本密钥来指定的。
- 版本2.x. 这是在YAML根目录下的一个版本:“2”或版本:“2.1”条目指定的。
- 版本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套件的话。