2017-07-20 64 views
1

我修改了docker-compose.yml文件,如https://hub.docker.com/_/solr/上給出的那樣,通過添加volumes配置和更改entrypoint。修改後的文件如下:使用docker-composose中的入口點運行自定義腳本

version: '3' 
services: 
    solr: 
    image: solr 
    ports: 
    - "8983:8983" 
    volumes: 
     - ./solr/init.sh:/init.sh 
     - ./solr/data:/opt/solr/server/solr/mycores 
    entrypoint: 
     - init.sh 
     - docker-entrypoint.sh 
     - solr-precreate 
     - mycore 

我需要在入口點啓動之前運行這個'init.sh'來準備我的容器內的文件。

,但我得到以下錯誤:

ERROR: for solr_solr_1 Cannot start service solr: oci runtime error: container_linux.go:247: starting container process caused "exec: \"init.sh\": executable file not found in $PATH"

早些時候,我發現了大約從here在Neo4j的官方圖片掛鉤。我還可以在這裏使用類似的東西嗎?

更新1:從下面的評論,我意識到,dockerfile設置WORKDIR /opt/solr由於其中executable file not found in $PATH。所以我通過使用/init.sh提供入口點的絕對路徑來進行測試。但是,這也給了錯誤,但不同的一個:

standard_init_linux.go:178: exec user process caused "exec format error"

+0

它不應該是./init.sh? – philipp

+0

謝謝,這有所幫助。我嘗試了'./init.sh',它給出了同樣的錯誤,但是我嘗試了'/ init.sh',並且給出了'permission denied'權限。 – Ayushya

+0

dockerfile設置'WORKDIR/opt/solr',所以我猜它在那個路徑中查找'init.sh'。 – Grimmy

回答

1

看起來你需要映射你的音量/docker-entrypoint-initdb.d/

version: '3' 
services: 
    solr: 
    image: solr 
    ports: 
    - "8983:8983" 
    volumes: 
     - ./solr/init.sh:/docker-entrypoint-initdb.d/init.sh 
     - ./solr/data:/opt/solr/server/solr/mycores 
    entrypoint: 
     - docker-entrypoint.sh 
     - init 

https://hub.docker.com/_/solr/

Extending the image The docker-solr image has an extension mechanism. At run time, before starting Solr, the container will execute scripts in the /docker-entrypoint-initdb.d/ directory. You can add your own scripts there either by using mounted volumes or by using a custom Dockerfile. These scripts can for example copy a core directory with pre-loaded data for continuous integration testing, or modify the Solr configuration.

docker-entrypoint.sh似乎負責基於sh腳本運行對傳遞給它的論據。因此,init是這反過來又嘗試運行的第一個參數init.sh

docker-compose logs solr | head 

更新1:

我一直在努力得到這個工作,終於想通了,爲什麼我的搬運工,撰寫不而指向/docker-entrypoint-initdb.d/init.sh的docker run -v正在工作。

事實證明,刪除入口點樹是解決方案。這是我最後的碼頭工人,撰寫:

version: '3' 
services: 
    solr: 
    image: solr:6.6-alpine 
    ports: 
    - "8983:8983" 
    volumes: 
     - ./solr/data/:/opt/solr/server/solr/ 
     - ./solr/config/init.sh:/docker-entrypoint-initdb.d/init.sh 

我./solr/config/init.sh

#!/bin/bash 
echo "running" 
touch /opt/solr/server/solr/test.txt; 
echo "test" > /opt/solr/server/solr/test.txt; 
+0

我能夠通過在腳本中包含'init.sh'來找到解決方法,該腳本將在容器外運行,然後啓動容器。但是,這似乎更好! – Ayushya

+0

對不起,我剛剛測試過它,它看起來像不工作 – gateblues

+0

我認爲它應該在編輯後工作。請檢查。 – Ayushya