查docker logs,找不到container里的路径

查报错

Sining Liu
Feb 24, 2017 · 3 min read

现在,我的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

  1. volumes知道compose去找那项目文件
  2. docker logs <container name> 可以用户查找logs,如果container支持的话。
Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade