方式一:/bin/bash -c 字符串方式
-
version: '2'
-
services:
-
prj1:
-
build:
-
context: .
-
dockerfile: Dockerfile.prj1
-
environment:
-
SERVER_LISTEN_URI: "tcp://0.0.0.0:9000"
-
#執行多條指令
-
command: /bin/bash -c "cp /app/dtest/config.default.yml /app/config.yml && python -u /app/dtest/tcc.py"
-
#目錄映射
-
volumes:
-
- ..:/app
-
- ./tmp:/var/tmp
-
ports:
-
- "9000:9000"
-
links:
-
- redis
另一個示例:
command: /bin/bash -c " while true; do sleep 1; done"
方式二:/bin/bash -c 配置文件方式
1 串行運行
如果這幾個命令是沒有要求並行運行,則配置如下:
-
command:
-
- sh
-
- -c
-
- |
-
cmd1
-
cmd2
-
cmd3
如上配置會按順序執行cmd1,之后再執行cmd2,之后cmd3。對於可以串行的命令,這樣即可。
2 並行運行
有時候想配置幾個常駐腳本在docker,希望這幾個腳本一起跑起來(並行運行),上述1的辦法就不行了。
Linux 把命令行扔后台運行的一個辦法就是在后面加上 &,但在docker 是否可以如下這樣配置?
-
command:
-
-
-
-
cmd1 &
-
cmd2 &
-
cmd3 &
上面是不正確的,在配置時候我就踩了這樣的坑,docker 運行起來,就馬上結束了。猜測是像程序開發的開多線程一樣,“主線程開了線程,不等線程,自己就退出了,由於主線程退出,進程也跟着退出了,導致一個線程都沒有跑起來”。
上面cmd 都是要求常駐的,沒有順序要求,那么在命令中,前面的幾個都加上&,最后一個命令不加,也就是前面幾個扔后台運行,最后一個直接運行,使得docker 和最后一個cmd 一樣“生命周期”,這樣就做到幾個cmd 並行運行了。正確配置如下:
-
command:
-
- sh
-
- -c
-
- |
-
cmd1 &
-
cmd2 &
-
cmd3