2017-09-15 1 views
1

Je suis nouveau à Docker, en essayant de construire mon premier conteneur docker sur le compte AWS niveau gratuit t2.micro exempleDocker run n'a pas réussi à exécuter le conteneur

Je suis en mesure de construire mon docker basé sur ci-dessous Dockerfile.

FROM java:8 
COPY content-service/
RUN chmod +x /bin/start.sh 

CMD bash -C '/bin/start.sh' 

EXPOSE 8081 

MAINTAINER Velu 

Il échoue et se ferme pendant l'exécution de la commande de conteneur suite à l'obtention du message d'erreur.

[[email protected] cis-docker]$ sudo docker images 
REPOSITORY   TAG     IMAGE ID   CREATED    SIZE 
content-service  latest    9fa3ca5a8ac3  10 minutes ago  705.7 MB 
docker.io/java  8     d23bdf5b1b1b  8 months ago  643.1 MB 

[[email protected] cis-docker]$ sudo docker --debug run -p 8082:8082 content-service 
DEBU[0000] framesize: 18 
Starting service. 
DEBU[0000] Corrupted prefix: [] 
DEBU[0000] [hijack] End of stdout 

Toute aide serait appréciée.

+0

'changement -C' à' -c' et aussi quel est le contenu de '/ bin/start.sh' –

Répondre

0

J'ai trouvé et résolu ce problème.

Dans mon start.sh script dernière ligne J'ai cette ligne ci-dessous.

java -cp $CLASS_PATH $JVM_OPTIONS $CLASS_NAME ${ARGUMENTS[@]} & echo $! > $PID_FILE 

Dans cette ligne, je l'ai supprimer ce & echo $! > $ Pid_file,

travail:

java -cp $CLASS_PATH $JVM_OPTIONS $CLASS_NAME ${ARGUMENTS[@]} 
0

J'ai exécuté votre fichier docker en copiant un script shell simple qui affiche "bonjour" sur la console. Il a fonctionné avec succès.

De plus, il semble que votre conteneur docker ne soit pas en train de sortir. Docker exécute votre script shell et quitte gracieusement. Pour vérifier, vérifiez le code de sortie de votre commande d'exécution de docker en exécutant la commande ci-dessous dès que votre exécution de docker est terminée.

echo $?

Si les impressions de commande ci-dessus « 0 » sur l'écran, puis docker ne manqua pas.

Si vous attendez que votre script shell s'exécute en tant que démon d'arrière-plan, vous devez vous assurer que votre script ne se termine pas. La raison pour laquelle le conteneur docker se ferme dès que votre script shell spécifié dans la ligne CMD de votre Dockerfile est terminée est que la philosophie de conception de Docker est d'exécuter one process per container. Dans votre cas, ce processus unique est votre script shell. Donc, démarrez tout service que vous démarrez dans votre script shell en tant que processus de premier plan et le conteneur continuera à fonctionner tant que ce service est en cours d'exécution. Dès que ce service meurt, votre conteneur meurt, ce que vous pourriez vouloir.

Espérons que ça aide.