2017-07-20 1 views
1

J'ai modifié le fichier docker-compose.yml comme indiqué sur https://hub.docker.com/_/solr/ en ajoutant une configuration volumes et une modification dans entrypoint. Le fichier modifié est comme indiqué:Exécution d'un script personnalisé à l'aide d'entrypoint dans docker-composer

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 

Je dois exécuter cette « init.sh » avant entrypoint commence, pour préparer mes fichiers dans le contenant.

Mais je reçois des erreurs suivantes:

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"

Plus tôt j'ai trouvé sur les crochets d'image officiels dans Neo4j de here. Y at-il une chose similaire que je peux utiliser ici aussi?

Mise à jour 1: De commentaires ci-dessous, j'ai réalisé que dockerfile mis WORKDIR /opt/solr en raison de laquelle executable file not found in $PATH. J'ai donc testé en fournissant le chemin absolu d'entrypoint en utilisant /init.sh. Mais cela donne aussi une erreur, mais une autre:

standard_init_linux.go:178: exec user process caused "exec format error"

+0

devrait-il pas ./init.sh ?? – philipp

+0

Merci, ça a aidé un peu. J'ai essayé './Init.sh' et il a donné la même erreur mais j'ai essayé'/init.sh' et cela donne 'permission denied'. – Ayushya

+0

Le dockerfile définit 'WORKDIR/opt/solr', donc je suppose qu'il cherche' init.sh' dans ce chemin. – Grimmy

Répondre

1

Il semble que vous devez mapper votre volume /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 

De

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.

Le docker-entrypoint.sh semble être responsable de l'exécution des scripts sh basés sur les arguments qui lui ont été transmis. Alors init est le premier argument qui à son tour tente d'exécuter init.sh

docker-compose logs solr | head 

Mise à jour 1:

j'avais du mal à obtenir ce travail et enfin compris pourquoi mon docker-Compose n'a pas été pendant que le docker run -v pointait vers /docker-entrypoint-initdb.d/init.sh fonctionnait.

Il s'est avéré que l'enlèvement de l'arbre entrypoint était la solution. Voici mon docker-Compose final:

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 

mon ./solr/config/init.sh

#!/bin/bash 
echo "running" 
touch /opt/solr/server/solr/test.txt; 
echo "test" > /opt/solr/server/solr/test.txt; 
+0

J'ai réussi à trouver une solution de contournement en incluant 'init.sh' dans un script qui s'exécuterait à l'extérieur du conteneur, puis démarrerait le conteneur. Mais cela semble mieux! – Ayushya

+0

désolé je viens de le tester et il semble que son ne fonctionne pas – gateblues

+0

Je pense que cela devrait fonctionner après les modifications. Vérifiez s'il vous plaît. – Ayushya