Ayu*_*hya 10 docker docker-compose docker-entrypoint
我修改了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
Run Code Online (Sandbox Code Playgroud)
我需要在入口点开始之前运行这个“init.sh”,以准备我在容器内的文件。
但我收到以下错误:
错误:对于solr_solr_1无法启动服务solr:oci运行时错误:container_linux.go:247:启动容器进程导致“exec:\”init.sh\“:在$PATH中找不到可执行文件”
早些时候我从这里找到了关于 Neo4j 中的官方图像钩子。我也可以在这里使用类似的东西吗?
更新 1:从下面的评论中,我意识到 dockerfile 设置是WORKDIR /opt/solr
由于 which executable file not found in $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
Run Code Online (Sandbox Code Playgroud)
从
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
Run Code Online (Sandbox Code Playgroud)
更新 1:
我一直在努力docker run -v
让它工作,并最终弄清楚为什么我的 docker -compose 在指向 /docker-entrypoint-initdb.d/init.sh 时不起作用。
事实证明,删除入口点树是解决方案。这是我最后的 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
Run Code Online (Sandbox Code Playgroud)
我的 ./solr/config/init.sh
#!/bin/bash
echo "running"
touch /opt/solr/server/solr/test.txt;
echo "test" > /opt/solr/server/solr/test.txt;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19033 次 |
最近记录: |