首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用docker-compose中的入口点运行自定义脚本

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

Stack Overflow用户
提问于 2017-07-20 18:05:45
回答 2查看 20.5K关注 0票数 10

我修改了https://hub.docker.com/_/solr/上给出的docker-compose.yml文件,添加了一个volumes配置,并在entrypoint中进行了更改。修改后的文件如下:

代码语言:javascript
复制
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格式错误“

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-06 02:10:53

看起来您需要将卷映射到/docker-entrypoint-initdb.d/

代码语言:javascript
复制
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

代码语言:javascript
复制
docker-compose logs solr | head

更新1:

我一直在努力让它工作,最终弄清楚为什么我的docker-compose不能工作,而指向/docker-entrypoint-initdb.d/init.sh的docker run -v却在工作。

事实证明,删除入口点树就是解决方案。这是我的最后一个docker-compose:

代码语言:javascript
复制
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

代码语言:javascript
复制
#!/bin/bash
echo "running"
touch /opt/solr/server/solr/test.txt;
echo "test" > /opt/solr/server/solr/test.txt;
票数 7
EN

Stack Overflow用户

发布于 2018-06-10 02:07:44

另一个对我有效的解决方案是通过放置/bin/ by来修改入口点。

代码语言:javascript
复制
version: '3'
services:
  web:
    build: .
    volumes:
    - .:/code
    entrypoint :  
    - /bin/sh
    - ./test.sh
    ports:
    - "5000:5000 

其中test.sh是在容器内运行所需的bash脚本。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45211594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档