在docker-compose中使用入口点运行自定义脚本

我通过添加volumesconfiguration和entrypoint更改来修改docker-compose.yml文件,如https://hub.docker.com/_/solr/中所示。 修改后的文件如下所示:

 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”,以便在容器内准备我的文件。

但是我得到以下错误:

错误:对于solr_solr_1无法启动服务solr:oci运行时错误:container_linux.go:247:启动容器进程导致“exec:\”init.sh \“:可执行文件找不到$ PATH中”

早些时候,我从这里find了关于neo4j的官方图像钩子。 有没有类似的东西我也可以在这里使用?

更新1:从下面的评论,我意识到dockerfile设置WORKDIR /opt/solr由于哪个executable file not found in $PATH 。 所以我通过使用/init.sh来提供入口点的绝对path来进行/init.sh 。 但是这也给了错误,但是另外一个:

standard_init_linux.go:178:exec用户进程导致“exec格式错误”

看起来您需要将您的卷映射到/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/

扩展图像 docker-solr图像具有扩展机制。 在运行时,在启动Solr之前,容器将在/docker-entrypoint-initdb.d/目录中执行脚本。 您可以通过使用装入的卷或使用自定义的Dockerfile在其中添加自己的脚本。 这些脚本可以例如复制带有预加载数据的核心目录以进行持续集成testing,或者修改Solrconfiguration。

docker-entrypoint.sh似乎负责根据传递给它的参数来运行sh脚本。 所以init是第一个参数,它依次尝试运行init.sh

 docker-compose logs solr | head 

更新1:

我一直在努力得到这个工作,终于想出了为什么我的docker-compose不工作,而docker run -v指向/docker-entrypoint-initdb.d/init.sh工作。

事实certificate,删除入口点树是解决scheme。 这是我最后的docker工作人员:

 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;