web-dev-qa-db-ja.com

docker-composeでエントリポイントを使用してカスタムスクリプトを実行する

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に見つかりません」

以前、neo4jの公式画像フックについて ここ から見つけました。ここでも同じようなものはありますか?

更新1:以下のコメントから、dockerfileがWORKDIR /opt/solrを設定したためにexecutable file not found in $PATHが設定されていることがわかりました。そこで、/init.shを使用してエントリポイントへの絶対パスを指定してテストしました。しかし、これもエラーを引き起こしますが、別のエラーが発生します。

standard_init_linux.go:178:execユーザープロセスが「execフォーマットエラー」を引き起こしました

6
Ayushya

ボリュームを/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 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;
5
gateblues

私のために働いた別の解決策は、/ bin/shを配置することによってエントリポイントを変更することでした。その後は少しこのようになりました

version: '3' services: web: build: . volumes: - .:/code entrypoint :
- /bin/sh - ./test.sh ports: - "5000:5000
ここで、test.shは、コンテナー内で実行するために必要なbashスクリプトです。

1
Aditya Gaur