Comment faire pour exécuter un script bash dans une Alpine conteneur Docker
J'ai un répertoire contenant seulement deux fichiers, Dockerfile
et sayhello.sh
:
.
├── Dockerfile
└── sayhello.sh
La Dockerfile
lit
FROM alpine
COPY sayhello.sh sayhello.sh
CMD ["sayhello.sh"]
et sayhello.sh
contient simplement
echo hello
La Dockerfile
construit avec succès:
kurtpeek@Sophiemaries-MacBook-Pro ~/d/s/trybash> docker build --tag trybash .
Sending build context to Docker daemon 3.072 kB
Step 1/3 : FROM alpine
---> 665ffb03bfae
Step 2/3 : COPY sayhello.sh sayhello.sh
---> Using cache
---> fe41f2497715
Step 3/3 : CMD sayhello.sh
---> Using cache
---> dfcc26c78541
Successfully built dfcc26c78541
Cependant, si j'essaie de run
, je reçois un executable file not found in $PATH
erreur:
kurtpeek@Sophiemaries-MacBook-Pro ~/d/s/trybash> docker run trybash
container_linux.go:247: starting container process caused "exec: \"sayhello.sh\": executable file not found in $PATH"
docker: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: \"sayhello.sh\": executable file not found in $PATH".
ERRO[0001] error getting events from daemon: net/http: request canceled
Quelqu'un peut m'expliquer quelle en est la cause? (Je me souviens de l'exécution de scripts dans debian:jessie
à base d'images d'une manière similaire, il est peut-être Alpin-spécifique)?
OriginalL'auteur Kurt Peek | 2017-06-28
Vous devez vous connecter pour publier un commentaire.
Alpin vient avec /bin/sh comme shell par défaut au lieu de /bin/bash
De sorte que vous pouvez
1) ont comme première ligne de votre sayhello.sh un beau spectacle définition de /bin/sh, de sorte que votre fichier sayhello.sh commencera avec
#!/bin/sh
2) installer bash dans votre Alpine de l'image, comme vous semblez attendre bash est présent, avec une telle ligne dans votre Dockerfile
RUN apk add --update bash && rm -rf /var/cache/apk/*
OriginalL'auteur user2915097
Ce réponse est complètement à droite et fonctionne très bien.
Il y a une autre façon, vous pouvez exécuter des scripts bash alpin base de docker
Vous avez besoin de changer CMD comme ci-dessous
Et cela fonctionne aussi.
OriginalL'auteur aerokite
N'oubliez pas d'accorder de permission d'exécution de tous les scripts.
OriginalL'auteur debus
À l'aide de la
CMD
, docker est à la recherche de lasayhello.sh
dans lePATH
, MAIS vous l'avez copié dans/
qui n'est pas dans lePATH
.Donc utiliser le chemin absolu du script que vous souhaitez exécuter:
BTW, comme @user2915097 dit, faire attention à ce que alpine n'a pas de bash par défaut, dans le cas de votre script à l'aide dans le shebang.
OriginalL'auteur zigarn