Estou tentando executar um script durante meu processo de construção no meu Dockerfile
. Mas não parece funcionar.
Eu tentei assim:
FROM php:7-fpm
ADD bootstrap.sh /
ENTRYPOINT ["/bin/bash", "/bootstrap.sh"]
Também desta forma:
FROM php:7-fpm
ADD bootstrap.sh /
RUN bash -c "/bootstrap.sh"
E também executando meu contêiner em execução:
docker exec symfony /bin/bash -c "/bootstrap.sh"
Nada parece funcionar.
Você sabe como fazê-lo?
docker
dockerfile
Kevin
fonte
fonte
bootstarp.sh
bit executável está definido?docker exec -it symfony bash
dentro do contêiner, poderá executar o script manualmente e verificar seu conteúdo? (cat bootstarp.sh
)?docker exec symfony /bin/bash /bootstarp.sh
e me diga o resultado.Respostas:
RUN
eENTRYPOINT
são duas maneiras diferentes de executar um script.RUN
significa que ele cria um contêiner intermediário, executa o script e congela o novo estado desse contêiner em uma nova imagem intermediária. O script não será executado depois disso: sua imagem final deve refletir o resultado desse script.ENTRYPOINT
significa que sua imagem (que ainda não executou o script) criará um contêiner e executará esse script.Em ambos os casos, o script precisa ser adicionado e
RUN chmod +x /bootstrap.sh
é uma boa ideia.Também deve começar com um shebang (como
#!/bin/sh
)Considerando seu script (
bootstarp.sh
: algunsgit config --global
comandos), seria melhor usarRUN
esse script uma vez em seuDockerfile
, mas certifique-se de usar o usuário certo (ogit config
arquivo global é%HOME%/.gitconfig
, que por padrão é o/root
único)Adicione ao seu Dockerfile:
Em seguida, ao executar um contêiner, verifique o conteúdo de
/root/.gitconfig
para confirmar se o script foi executado.fonte
bootstrap.sh
vez debootstarp.sh
: consulte stackoverflow.com/a/1254561/6309Além das respostas acima:
Se você criou / editou seu arquivo de script .sh no Windows, certifique-se de que ele foi salvo com a linha terminando no formato Unix . Por padrão, muitos editores no Windows converterão as terminações de linha do Unix para o formato do Windows e o Linux não reconhecerá o shebang (#! / Bin / sh) no início do arquivo. Então o Linux irá produzir a mensagem de erro como se não houvesse shebang.
Dicas:
fonte
Tente criar um script com
ADD
comando e especificação de diretório de trabalho Assim ("script" é o nome do script e/root/script.sh
é onde você deseja no container, pode ser um caminho diferente:Neste caso
ADD
tem que vir antesCMD
, se você tiver um BTW, é uma maneira legal de importar scripts para qualquer local no contêiner da máquina hostNo
CMD
lugar[./script]
Deve executar automaticamente o seu script
Você também pode especificar
WORKDIR
como/root
, então você será automaticamente colocado na raiz, ao iniciar um contêinerfonte
script.sh
script.sh
é relativo aoDockerfile
É uma prática recomendada usar em
COPY
vez deADD
ao copiar do sistema de arquivos local para a imagem. Além disso, recomendo criar uma subpasta para colocar seu conteúdo. No mínimo, mantém as coisas organizadas. Certifique-se de marcar o script como executável usandochmod
.Aqui, estou criando uma
scripts
subpasta para colocar meu script e executá-lo:fonte
fonte