我修改了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',以便在容器中准备我的文件。
但我得到以下错误:
错误:对于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格式化 错误“
答案 0 :(得分:4)
您似乎需要将卷映射到/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
工作时无效。
事实证明,删除入口点树是解决方案。这是我最后的码头工作者:
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;
答案 1 :(得分:0)
对我有用的替代解决方案是通过放置/bin/sh来修改入口点。之后看起来有点像这样
/**
* @Entity
*/
class User {
/**
* @OneToMany
*/
private $debtors;
public function getDebtors() {
return $this->debtors;
}
public function setDebtors($debtors) {
$this->debtors = $debtors;
return $this;
}
}
其中test.sh是在容器内运行所需的bash脚本。