1. 程式人生 > >docker 執行多條命令失敗的解決方案

docker 執行多條命令失敗的解決方案

版本: Docker Server Version: 1.12.5 背景: 專案用到了celery,需要在我們專案跑起來之前,保證celery服務是開啟的。

開啟celery: 

celery -A celery_task worker -B -Q celery,lazy_queue
開啟我們的服務:
python /data/xxxx/myapp/main.py --port=9999
谷歌到只需要兩個命令用&&連線即可:
docker run -itd -v /data/xxxx/myapp:/data/xxxx/myapp -v /data/logs/myapp:/data/logs/myapp -v /etc/localtime --link myredis1:myredis1 --name myapp1 -p 9999:9999  myapp:v1  celery -A celery_task worker -B --workdir /data/xxxx/myapp/mycelery && python /data/xxxx/myapp/main.py --port=9999

竟然報錯了,環境找不到tormysql庫?咦明明安裝了呢,而且進入docker環境也能import tormysql成功。 為何會報這種 ImportError: No module named tormysql? 感覺是python有很多個,然後用了一個沒安裝環境的。 進入docker,whereis python: 
[[email protected] /]# whereis python
python: /usr/bin/python /usr/bin/python2.7 /usr/bin/python2.7-config /usr/lib/python2.7 /usr/lib64/python2.7 /etc/python /usr/include/python2.7
 可怕果然有很多python環境,修改我們的docker run指令:
docker run -itd -v /data/xxxx/myapp:/data/xxxx/myapp -v /data/logs/myapp:/data/logs/myapp --link myredis1:myredis1 --name myapp1   -v /etc/localtime:/etc/localtime -p 9999:9999 myapp:v1  celery -A celery_task worker -B --workdir /data/xxxx/myapp/mycelery && /usr/bin/python2.7 /data/xxxx/myapp/main.py --port=9999
然而並沒有什麼卵用。還是報找不到tormysql。 我靈機一動,這個python不會是宿主機的python吧,然後在宿主機pip install tormysql,我擦啦,測試通過。 嘖嘖嘖,這第二個命令竟然用的是宿主機的python!!! 用sh -c ‘xxx && xxx’,在這個基礎上,我們也改成如此 sh -c 'xxx | xxx': 
docker run -itd -v /data/xxxx/myapp:/data/xxxx/myapp -v /data/logs/myapp:/data/logs/myapp --link myredis1:myredis1 --name myapp1 -v /etc/localtime:/etc/localtime -p 9999:9999  myapp:v1   sh -c  '/usr/bin/python2.7 /data/xxxx/myapp/main.py --port=9999  | celery -A celery_task worker -B  -Q lazy_queue,celery -Ofair --workdir /data/xxxx/myapp/mycelery'
執行成功。

以上

相關推薦

docker 執行命令失敗解決方案

版本: Docker Server Version: 1.12.5 背景: 專案用到了celery,需要在我們專案跑起來之前,保證celery服務是開啟的。 開啟celery:  celery -A celery_task worker -B -Q celery,laz

docker run 之後執行命令

amp net ros tps logs href class clas com 原文:docker run 之後執行多條命令執行 ls docker run microsoft/dotnet ls && cd /root 執行 多條使用sh -c命令

jquery hover中嵌套mouseenter,mouseenter函數執行次的問題解決方案

ctype iyu use api wid list rip FN urn 已知曉在jq中hover的API就是把mouseenter和mouseleave組合在一起來用的,在jq中實現`hover:function(fnOver,fnOut){return this.mo

windows批處理執行命令

本地環境開啟需要啟動多個服務,每次一個個啟動費時,於是寫個批處理: @echo off   start cmd /k "cd/d D:\environment\zookeeper-3.4.13\bin\ &&zkServer.cmd" start cmd /k "cd/

linux一行執行命令 shell

在命令列可以一次執行多個命令,有以下幾種: & 表示任務在後臺執行 &&表示前一條命令執行成功時,才執行後一條命令 | 表示管道,上一條命令的輸出,作為下一條命令引數 || 表

Linux 連續執行命令

很早之前初學Linux基本命令的時候,看到這個知識點,說實話覺得有點奇葩。一條一條執行多好,非得把幾條命令寫在一起。最近專案在進行過程中,需要完成一些自動化迴歸測試。對了,就是傳說中的“Automation”。 以前一直使用“shell+expect”組合。 後來在使用過

linux學習筆記-同時執行命令

我們在Linux和cmd中經常會遇到這種情況,進入一個目錄執行一條命令,再進入一個目錄執行另一條命令,這種方法效率並不高,今天給大家帶來一種簡便的方法 原始方法 $ cd /var/w

Linux 連續執行命令的方法

多個命令可以放在一行上,其執行情況得依賴於用在命令之間的分隔符。如果每個命令被一個分號 (;) 所分隔,那麼命令會連續的執行下去,如: 引用 [email protected]:/proc> printf "%s/n" "This is executed

一個.bat檔案執行命令

最近用到的kafka佇列,開啟時需要啟動自帶的zookeeper,還有自身的kafka服務,因為業務需求,還要啟動一個kafka-monitor服務,三條命令雖然不多,但是每次手打也是很費勁的,更何況組長說以後的kafka可能要做叢集,想了想還是聽組長的,寫個bat檔案直接啟

使用批處理檔案同時打個CMD視窗且執行命令

使用批處理檔案時,可以用下面方法打打多個CMD視窗,並且每個視窗中執行多條命令。 start 用來啟動一個應用 cmd /k 表示cmd後面的命令執行完後不關閉視窗。如果要在執行完成後關閉視窗可以用/c 。詳細請使用cmd/?檢視 "命令1&&命令2&

一臺機器同時執行個Tomcat服務解決方案(2017更新)

作者:fbysss msn:[email protected]  blog:blog.csdn.net/fbysss 宣告:本文由fbysss原創,轉載請註明出處 關鍵字:Tomcat 如何在一臺伺服器上安裝多個Tomcat 假設有2個tomcat,分別為 /

linux 一次執行命令

1、mkdir myfile ; chmod -R 777 myfile [[email protected] myfile]# mkdir www ; chmod -R 777 www [[email protected] myfile]# ls ww

Kafka producer程式本地執行時傳送資訊失敗解決方案

今天執行kafka本地producer程式時,總是傳送資訊失敗,經過查閱資料,最終發現是kafka叢集的配置問題。 kafka 叢集broker : broker1:9092,broker2:9092 配置解析: config/server.properties檔案中有幾個

Linux下在一行執行命令

From: http://www.cnblogs.com/koreaseal/archive/2012/05/28/2522178.html 要實現在一行執行多條Linux命令,分三種情況: 1、&& 舉例: lpr /tmp/t2 && rm /tmp/t2 第2條命令

shell 執行命令

一般程式語言執行多行程式碼,比如javapublic void methodA(){     int i = a.read();     System.out.println(i);}如果 1 步 a.read()執行不成功,丟擲了異常,那麼程式不會執行第2步如果是shell

MySQL軟體次安裝失敗解決方案

每次安裝和解除安裝MySQL都會有記錄存在在電腦內部,只有清除這些記錄和檔案才能再次安裝成功MySQL,下面是解除安裝的流程分享: 注:不能留有任何有關的MySQL安裝互斥的檔案和記錄,必須刪除乾淨! 解決方法: 方法:1、解除安裝MySQL  (可以在控制面板的程式

docker:一次執行命令

大叔希望兩個ls,即多條sh命令都在容器裡執行,這樣就避免了新加SH檔案的煩惱! 然後大叔找了一些資料,幸運的是,被大叔找到了! docker run 5800 sh -c "ls && echo '-------' && ls"

docker容器啟動時執行腳本 run /bin/bash執行指令

null 最好 執行 ash .sh bash 指令 docke -i 1、首先需要編寫需要啟動的腳本,並將腳本放在 /etc/init.d/目錄下 如:cs.sh 2、修改權限 3、chkconfig --add cs.sh 4、 chkconfig cs.sh on 啟

Linux 執行命令的方法與區別(解決supervisor啟動使用GPU的python服務)

在很多情況下,我們需要一次性執行多條命令。比如我在用supervisor啟動python服務的時候就有類似的需求。 對於我的例子背景是通過supervisor監控python在python 35環境下的GPU使用的服務,其中分三個塊:python35環境的需求、GPU服務的使用、服務自動重啟。當

mysql 命令列訪問伺服器 失敗解決方案

問題所在:    使用者登入方式許可權設定問題 解決思路   修改登入方式 結果   就可以通過 命令 -h ip  的方式登入了 #先用本地連結方式連結 mysql -u root -p #使用使用者mysql mys