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フォーマットエラー」を引き起こしました
ボリュームを/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;
私のために働いた別の解決策は、/ bin/shを配置することによってエントリポイントを変更することでした。その後は少しこのようになりました
version: '3' services: web: build: . volumes: - .:/code entrypoint :
ここで、test.shは、コンテナー内で実行するために必要なbashスクリプトです。
- /bin/sh - ./test.sh ports: - "5000:5000