我修改了https://hub.docker.com/_/solr/上给出的docker-compose.yml
文件,添加了一个volumes
配置,并在entrypoint
中进行了更改。修改后的文件如下:
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‘,以便在容器中准备我的文件。
但是我得到了以下错误:
错误: for solr_solr_1无法启动服务solr: oci运行时错误: container_linux.go:247:启动容器进程导致"exec:\"init.sh\":在$PATH中找不到可执行文件“
早些时候,我在here的neo4j中找到了官方的图片钩子。这里有没有类似的东西我也可以用?
更新1:从下面的评论中,我意识到dockerfile设置WORKDIR /opt/solr
是由于哪个executable file not found in $PATH
。因此,我通过使用/init.sh
提供入口点的绝对路径进行了测试。但这也会产生错误,但这是一个不同的错误:
standard_init_linux.go:178: exec用户进程导致"exec格式错误“
发布于 2017-10-06 02:10:53
看起来您需要将卷映射到/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在其中添加您自己的脚本。例如,这些脚本可以复制包含用于持续集成测试的预加载数据的核心目录,或者修改Solr配置。
docker-entrypoint.sh似乎负责根据传递给它的参数运行sh脚本。所以init是第一个参数,它依次尝试运行init.sh
docker-compose logs solr | head
更新1:
我一直在努力让它工作,最终弄清楚为什么我的docker-compose不能工作,而指向/docker-entrypoint-initdb.d/init.sh的docker run -v
却在工作。
事实证明,删除入口点树就是解决方案。这是我的最后一个docker-compose:
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
My./solr/config/init.sh
#!/bin/bash
echo "running"
touch /opt/solr/server/solr/test.txt;
echo "test" > /opt/solr/server/solr/test.txt;
发布于 2018-06-10 02:07:44
另一个对我有效的解决方案是通过放置/bin/ by来修改入口点。
version: '3'
services:
web:
build: .
volumes:
- .:/code
entrypoint :
- /bin/sh
- ./test.sh
ports:
- "5000:5000
其中test.sh是在容器内运行所需的bash脚本。
https://stackoverflow.com/questions/45211594
复制相似问题