與Running Instance互動

docker exec

$ docker run -it centos bash
[root@6b2be6ff2f00 /]#
$ docker exec 6b2be6ff2f00 ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 10:21 ?        00:00:00 bash
root        16     0  0 10:22 ?        00:00:00 ps -ef

docker logs [-t]

docker logs可以用來檢視執行中docker的screen output,通常對以daemon形式執行的系統來說相當有用,因為此時我們可以不用attach到該instance環境中就可以透過這個指令直接看到目前執行的狀況,也不用擔心影響到執行中的instance...

這邊以執行一個node.js express專案執行為例,我們可以在本機端使用express產生專案,如下:

$ cd ~/project
$ express -e web
$ cd web && npm install

接下來我們直接使用我所建置的Docker:peihsinsu/nodejs-runtime來啟動這個目錄的node.js程式,這個image的Dockerfile如下:

FROM google/nodejs
WORKDIR /data
EXPOSE 3000
CMD []
ENTRYPOINT ["/nodejs/bin/npm", "start"]

最後image啟動後會expose 3000 port並且使用"npm start"來啟動container中"/data"目錄下的node.js程式。

啟動方式如下:

$ docker run -d -p 3000:3000 -v ~/project/web:/data peihsinsu/nodejs-runtime
a66d4ee9ca8a03eaa4e72d701550ed10f6222b64fc52f0934c9ec389ac516c5c

此時可以在docker ps看到instance的簡短id: a66d4ee9ca8a

$ docker ps
CONTAINER ID        IMAGE                             COMMAND                CREATED             STATUS              PORTS                              NAMES
a66d4ee9ca8a        peihsinsu/nodejs-runtime:latest   "/nodejs/bin/npm sta   7 seconds ago       Up 4 seconds        3000/tcp, 0.0.0.0:8080->8080/tcp   focused_rosalind

此時如要看到該程序啟動的狀態,就可以使用docker logs來查看

$ docker logs -f 1558d25188647136e16ad5f8b418768ff8a9d6932ec03f216cbce0a861ea046d

> [email protected] start /data
> node ./bin/www

GET / 200 859.029 ms - 170
GET / 200 27.114 ms - 170

docker logs除了用來看執行中的instance log,也可以用來看執行有錯誤時候的錯誤log,例如一個docker run沒有正確啟動時候,但是docker只吐回instance id沒有其他錯誤訊息,可以用docker logs來debug...

$ docker run -d -p 3000:3000 -v /tmp/web2:/data peihsinsu/nodejs-runtime
d1a63a8aa8301a251d110b7104ceb14fb9c649b44ce1c4ba3b17fe00336e4636

$ docker logs d1a63a8aa8301a251d110b7104ceb14fb9c649b44ce1c4ba3b17fe00336e4636
npm ERR! Error: ENOENT, open '/data/package.json'
npm ERR! If you need help, you may report this *entire* log,
npm ERR! including the npm and node versions, at:
npm ERR!     <http://github.com/npm/npm/issues>
npm ERR! System Linux 3.18.5-tinycore64
npm ERR! command "/nodejs/bin/node" "/nodejs/bin/npm" "start"
npm ERR! cwd /data
npm ERR! node -v v0.10.33
npm ERR! npm -v 1.4.28
npm ERR! path /data/package.json
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR!     /data/npm-debug.log
npm ERR! not ok code 0

results matching ""

    No results matching ""