运行 在 docker-compose 中使用入口点的自定义脚本
Running a custom script using entrypoint in docker-compose
我通过添加 volumes
配置和 entrypoint
中的更改修改了 https://hub.docker.com/_/solr/ 上给出的 docker-compose.yml
文件。修改后的文件如下:
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"
早些时候我从 找到了关于 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"
您似乎需要将卷映射到 /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-compose 在 docker run -v
指向 /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
我的./solr/config/init.sh
#!/bin/bash
echo "running"
touch /opt/solr/server/solr/test.txt;
echo "test" > /opt/solr/server/solr/test.txt;
另一种对我有用的解决方案是通过放置 /bin/sh 来修改入口点。之后看起来有点像这样
version: '3'
services:
web:
build: .
volumes:
- .:/code
entrypoint :
- /bin/sh
- ./test.sh
ports:
- "5000:5000
其中 test.sh 是容器内 运行 所需的 bash 脚本。
我通过添加 volumes
配置和 entrypoint
中的更改修改了 https://hub.docker.com/_/solr/ 上给出的 docker-compose.yml
文件。修改后的文件如下:
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"
早些时候我从
更新 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"
您似乎需要将卷映射到 /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-compose 在 docker run -v
指向 /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
我的./solr/config/init.sh
#!/bin/bash
echo "running"
touch /opt/solr/server/solr/test.txt;
echo "test" > /opt/solr/server/solr/test.txt;
另一种对我有用的解决方案是通过放置 /bin/sh 来修改入口点。之后看起来有点像这样
version: '3'
services:
web:
build: .
volumes:
- .:/code
entrypoint :
- /bin/sh
- ./test.sh
ports:
- "5000:5000
其中 test.sh 是容器内 运行 所需的 bash 脚本。