我是Docker世界的新手,我花了我的假期来学习这个码头工人(但它比Vagrant要难得多)。 所以我使用Ubuntu 16.04,我成功安装了docker和docker-compose。
我读了这个教程:Quickstart: Docker Compose and Rail s 但这不起作用......也许教程不好。
我有这个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教程并不好。
答案 0 :(得分:8)
原因是你删除了你所遵循的示例教程的第一行,它们确实很重要
因为,查看您所拥有的docker
版本,您应该使用高于1.6.x的docker-compose
版本。
要识别这一点,您可以运行
$ 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.这是使用版本指定的:'2'或版本:'2.1' 进入YAML的根源。
- 版本3.x,最新推荐版本,旨在实现 Compose和Docker Engine的群集模式之间交叉兼容。 这是使用版本:'3'或版本:'3.1'等条目指定的 在YAML的根源。
醇>
此外,这里有一个小docker-compose
版本/ Composer文件矩阵:
Compose file format | Docker Engine release --------------------|---------------------- 3.0 ; 3.1 | 1.13.0+ 2.1 | 1.12.0+ 2.0 | 1.10.0+ 1.0 | 1.9.1.+
- Compose高达1.6.x支持版本1。它将在以后的Compose版本中弃用。
- Compose 1.6.0+支持版本2文件,需要版本为1.10.0 +的Docker Engine。
- 版本2的升级,它引入了仅适用于Docker Engine版本1.12.0 +
的新参数- 版本2.1的升级,它引入了仅适用于Docker Engine版本1.13.0+的新参数。此版本还允许在服务配置中指定默认比例数。
- 设计为在Compose和Docker Engine的群集模式之间交叉兼容,版本3删除了几个选项并添加了几个选项。
在docker文档页面上,现在还有关于如何升级Compose文件的实用指南:
其他有用的docker撰写文档:
答案 1 :(得分:4)
这表明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
答案 2 :(得分:2)
我认为来自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格式中添加。
答案 3 :(得分:2)
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
如果你也使用了apt软件包,那么你可能也想先安装他们的官方docker-engine。