2017-07-26 42 views
0

運行泊塢窗工具箱的Windows 10的主機上時。Dockerfile:代碼127試圖運行shell腳本

有一個Dockerfile

FROM 16.04 
... 
RUN if [ some_condition ]; then ./foo.sh; fi 
... 

有一個foo.sh

#!/bin/bash 
... 
echo 'Me working' 

現在試圖建立多克爾圖像時:

docker build -t name_of_the_image . 

獲取錯誤:

Step 7/12 : RUN ./foo.sh 
---> Running in e7e0703d3f8f 
/bin/sh: 1: ./foo.sh: not found 
The command '/bin/sh -c ./foo.sh' returned a non-zero code: 127 

我會承擔錯誤將是碼頭工人沒有看到的bash。任何建議如何解決這個問題?


編輯:已經複製所有文件到泊塢窗,Dockerfile

FROM ubuntu:16.04 
MAINTAINER Mr Anderson "[email protected]" 

# set workdir 
COPY . /app 
WORKDIR /app 

# Run scripts 
RUN ./foo.sh 

回答

0

經過一番深入調查:

  • 使用CMD跑過來是不是因爲這些命令的工作方式一個完美的解決方案。可以使用任意次數的RUN來逐層構建Docker鏡像,而CMD只能在構建鏡像時執行一次。

在我的情況的解決方案是:

  • 打開./foo.sh文件,VIM和運行::set fileformat=unix並保存文件。

長話短說:在shell腳本結束行是不正確的,不得不被轉換到Unix的。

1

你需要複製/複製文件到,然後才能執行容器/ RUN的腳本。

此外,由於您在調用腳本時正在使用相對路徑,因此請務必設置WORKDIR。

COPY ./foo.sh /app/foo.sh 
WORKDIR /dir 
RUN chmod +x /app/foo.sh 
RUN if [ some_condition ]; then ./foo.sh; fi 

還要確保腳本是可執行的。

+0

好想法。不幸的是,情況並非如此 - 已經使用COPY將所有文件複製到docker。/app'。 – Oleg

+0

好的,使用'CMD sh/app/foo.sh'工作。 – Oleg

+0

大聲笑很好,我刪除了評論,很高興你看到它在它消失之前...但很高興,這個伎倆。在那裏玩得開心! – Kosch