docker-compose command 執行多條指令


方式一:/bin/bash -c 字符串方式

  1. version: '2'
  2. services:
  3. prj1:
  4. build:
  5. context: .
  6. dockerfile: Dockerfile.prj1
  7. environment:
  8. SERVER_LISTEN_URI: "tcp://0.0.0.0:9000"
  9. #執行多條指令
  10. command: /bin/bash -c "cp /app/dtest/config.default.yml /app/config.yml && python -u /app/dtest/tcc.py"
  11. #目錄映射
  12. volumes:
  13. - ..:/app
  14. - ./tmp:/var/tmp
  15. ports:
  16. - "9000:9000"
  17. links:
  18. - redis

另一個示例:

command: /bin/bash -c " while true; do sleep 1; done"

方式二:/bin/bash -c 配置文件方式

1 串行運行

如果這幾個命令是沒有要求並行運行,則配置如下:

  1. command:
  2. - sh
  3. - -c
  4. - |
  5. cmd1
  6. cmd2
  7. cmd3

如上配置會按順序執行cmd1,之后再執行cmd2,之后cmd3。對於可以串行的命令,這樣即可。

2 並行運行

有時候想配置幾個常駐腳本在docker,希望這幾個腳本一起跑起來(並行運行),上述1的辦法就不行了。
Linux 把命令行扔后台運行的一個辦法就是在后面加上 &,但在docker 是否可以如下這樣配置?

  1. command:
  2. - sh
  3. - -c
  4. - |
  5. cmd1 &
  6. cmd2 &
  7. cmd3 &

上面是不正確的,在配置時候我就踩了這樣的坑,docker 運行起來,就馬上結束了。猜測是像程序開發的開多線程一樣,“主線程開了線程,不等線程,自己就退出了,由於主線程退出,進程也跟着退出了,導致一個線程都沒有跑起來”。

上面cmd 都是要求常駐的,沒有順序要求,那么在命令中,前面的幾個都加上&,最后一個命令不加,也就是前面幾個扔后台運行,最后一個直接運行,使得docker 和最后一個cmd 一樣“生命周期”,這樣就做到幾個cmd 並行運行了。正確配置如下:

  1. command:
  2. - sh
  3. - -c
  4. - |
  5. cmd1 &
  6. cmd2 &
  7. cmd3

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM