查docker logs,找不到container里的路径
查报错
现在,我的Rails运行在我的container中,环境是类似于production的一个环境(staging)。当我想要测试这个环境是否搭建起来的时候,得到这样一个错误
An unhandled lowlevel error occurred. The application logs may have details.
Rails竟然知道这是一个lowlevel 的错误,微笑。让我就去查了logs。
得到这样的更具体的搞错信息:

最后检查secrets.yml发现是我把secret_key_base写成了 sercret_key_base。好,现在这个问题解决了,但是这里面主要的问题是怎么查logs。我之前不会查log,甚至因为弄错了volumes(下一节谈到),而没法找到logs。
或许我可以用进入container的方法来查logs。但是因为偶然看到mysql 官方文档上的一个说明(大意是说:mysql support docker to inspect logs),改变了我的想法:
docker logs <container name>
我之前得到的图中的报错信息就是这么来的。
找不到container里的文件路径
当我想要去运行一个container的时候,我用了这样的命令
docker-compose -f docker-compose.stg.yml run --rm stg-app rake db:create db:migrate RAILS_ENV=staging
但是得到的结果却说
/stockholm-server/Gemfile not found
这里需要说明的是,我用compose是因为compose会把yml里面的很多设置项翻译成docker run 的options。用原句说就是:
much like passing command-line parameters to
docker run
而关于文件路径的那部分options叫做volumes。我在自己的compose中写成了这样,所以没有找到文件:
services:
app:
volumes:
- .:/stockholm-server当然的是,我已经建立的app目录,在根目录下面,但是问什么找不到呢?
后来,我把路径换成了所谓的绝对路径就找到了:
services:
app:
volumes:
- /stockholm-server这里面不同的是.和:,他们是什么意思呢,让我们一起来看看compose关于这一部分的介绍:
volumes:
# Just specify a path and let the Engine create a volume
- /var/lib/mysql这里面的问题是the Engine,但是谁是engine,这个目录更engine有什么关系。下面这张图对于描述the Engine 有帮助么?

Recall
- volumes知道compose去找那项目文件
- docker logs <container name> 可以用户查找logs,如果container支持的话。
