2017-10-13 76 views
0

我是一個初學者與碼頭工作,尤其是碼頭工作。目前,創建我最初的簡易碼頭環境,我遇到了第一個錯誤,我不知道爲什麼。 我試圖在stackoverflow中搜索解決方案,但沒有發現任何可以幫助我的解決方案。 開始我和泊塢窗「泊塢窗,撰寫了」我得到以下錯誤:碼頭 - 組成卷「沒有這樣的文件或目錄」

$ docker-compose up
Removing errorinstance_app_1
Recreating 8a358dfcb306_8a358dfcb306_8a358dfcb306_errorinstance_app_1 ...
Recreating 8a358dfcb306_8a358dfcb306_8a358dfcb306_errorinstance_app_1 ... error
ERROR: for 8a358dfcb306_8a358dfcb306_8a358dfcb306_errorinstance_app_1 Cannot start service app: oci runtime error: container_linux.go:265: starting container process caused "exec: \"./run.sh\": stat ./run.sh: no such file or directory"
ERROR: for app Cannot start service app: oci runtime error: container_linux.go:265: starting container process caused "exec: \"./run.sh\": stat ./run.sh: no such file or directory"
ERROR: Encountered errors while bringing up the project.

所以。繼我的文件夾結構:

  • 項目
    • 泊塢窗,compose.yml
    • 泊塢
      • 的Java
        • Dockerfile
    • SRC
      • run.sh

關注荷蘭國際集團我的搬運工,compose.yml:

version: '2' 
    services: 
     app: 
     build: 
      dockerfile: ./Docker/Java/Dockerfile 
      context: . 
     volumes: 
      - ./src:/usr/local/etc/ 
     working_dir: /usr/local/etc/ 
     command: ./run.sh 

而繼我的搬運工文件:

FROM java:7-jdk-alpine 
# WORKDIR /usr/local/etc 

run.sh

echo "Hello world." 

是的,我知道我能做到這一點的解決方案只能在一個docker-compose文件。但在將來我需要擴展Dockerfile。

有人可以幫我分別有沒有人看到這個問題?

+1

請問您可以更改命令:/ bin/bash,然後檢查腳本是否存在於/ usr/local/etc /目錄以及它擁有什麼權限? – Sergiu

+0

註釋掉這個命令,開始一個bash會話。一旦進入,你應該在你提到的工作目錄中......另外,請檢查執行權限是否爲@Sergiu – sebagomez

+0

更改命令我收到「找不到」異常。直接在Dockerfile「/ bin/sh:bash:not found」中執行該命令。在docker-compose文件中有該命令「ERROR:for java無法啓動服務應用程序:oci運行時錯誤:container_linux.go:265:啓動容器進程導致」exec:\「/ bin/bash \」:stat/bin/bash:沒有這樣的文件或目錄「。也試過只有」bash「 – SNO

回答

1

的問題是您使用的是dockerfile基礎泊塢窗圖像:試圖通過運行run.sh bash腳本啓動容器

FROM java:7-jdk-alpine 

。但上述圖片不支持bash本身

作爲參考,您可以在碼頭集線器頁面here中看到上述圖片的文檔。在這裏引用必要的部分:

java:alpine

...

To minimize image size, it's uncommon for additional related tools (such as git or bash) to be included in Alpine-based images. Using this image as a base, add the things you need in your own Dockerfile (see the alpine image description for examples of how to install packages if you are unfamiliar).

這就是問題所在。通過改變dockerfile到

  1. 只需使用java:7-jdk作爲基本圖像,而不是java:7-jdk-alpine
  2. 的基本圖像java:7-jdk-alpine的頂部安裝bash

    FROM java:7-jdk-alpine 
    RUN apk update && apk upgrade && apk add bash 
    #WORKDIR /usr/local/etc 
    

    現在,我能想到的2個解決方案

    *在高山linux中安裝bash的步驟源是here

0

它看起來像泊塢窗撰寫無法找到您的run.sh文件。該文件需要包含在您的泊塢窗圖像中。

將Dockerfile更改爲以下內容,然後使用docker build -t <YOUR_IMAGE_NAME> .重建映像。

FROM java:7-jdk-alpine 
ADD run.sh /usr/local/etc/run.sh 

一旦您的圖像被重建,再次運行docker-compose up

+0

非常感謝您的幫助。在這一點上有一個問題。我的理解是,docker-compose中的「卷」設置應該將這些文件映射到映像中,以便我不需要添加任何文件? – SNO

+0

docker-compose'volumes'將文件映射到正在運行的容器(即運行時容器正在運行時),而不是映像。在你的docker-compose配置中,你說的是「在啓動容器時運行'run.sh'腳本」,但是'run.sh'不存在,因爲它不是圖像的一部分。需要在構建時添加'run.sh'文件。 – grizzthedj

+0

好的。很高興知道。所以,假設我有多個由run.sh觸發的文件。我需要「添加」所有這些文件嗎?你對我有沒有「最佳實踐」,我可以如何以一種乾淨的方式處理?對於開發我的源文件夾包括java文件是要大(幾gb)添加所有文件每次新分別建立碼頭圖像總是新的。 – SNO

0

解決該問題的最簡單方法是在容器中執行bash會話,然後在容器內部,如果文件不在路徑中,則必須檢查文件是否存在於指定路徑中,它必須在將圖像創建到泊塢窗文件或通過docker-compose內部的卷創建時包含在內。

另一件要檢查的是你正在使用的相對路徑。很顯然,當你去查泊塢窗容器內的文件

泊塢窗EXEC -IT CONTAINER_NAME慶典

我建議你創建的泊塢窗撰寫文件的卷,因爲它是更容易的方式存在,也是最好的方法。

有一個問題,我想要做你,爲什麼你把Dockerfile文件放到Java路徑中?

這不是一個好主意Ø指引,遵循 正確的方法是把你的dockerfile文件到環境中的文件夾,這樣的dockerfile文件是不相關的應用程序的Java源

+0

謝謝你的迴應。我還有以下問題:如何運行docker exec -it CONTAINER_NAME bash?目前我的docker-compose正在拋出找不到文件的錯誤,所以我沒有運行實例的地方可以運行這個命令。擁有一個環境文件夾意味着什麼?你能舉個例子嗎?非常感謝你。 – SNO

0

我得到了這個錯誤很多,經過很多調查,它看起來像一些圖像已損壞。

刪除這些和重建解決問題。它不是碼頭安裝或配置本身。

相關問題