Docker exec не может выполнить скрипт внутри контейнера - PullRequest
0 голосов
/ 13 марта 2019

У меня есть скрипт bash, который выполняет некоторые команды Docker:

#!/usr/bin/env bash

echo "Create and start database"
cd ../../database
cp -R ../../../scripts/db db/
docker build -t a_database:1 .
docker run --rm --name a_db -e POSTGRES_PASSWORD=docker -d -p 5432:5432 a_database:1
docker network connect --ip 172.23.0.5 a_network a_db
sleep 15

echo "Initialize database"
docker exec a_db /root/db/dev/init_db.sh

echo "Cleanup"
rm -rf db

На Mac все работает нормально, проблема возникает, когда я пытаюсь запустить этот скрипт на машине с Windows. Когда я запускаю его, я получаю сообщение об ошибке:

OCI runtime exec failed: exec failed: container_linux.go:344: starting container process caused "exec: \"C:/Program Files/Git/root/db/dev/init_db.sh\": stat C:/Program Files/Git/root/db/dev/init_db.sh: no such file or directory": unknown

Каталог и скрипт (/root/db/dev/init_db.sh) существуют внутри контейнера Docker. Я не знаю, почему он пытается найти скрипт на хост-машине? Также, когда я выполняю команду:

docker exec a_db /root/db/dev/init_db.sh

непосредственно в командной строке (на окнах) выполняется скрипт. Есть идеи, что не так и почему он пытается использовать git?

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

Благодаря ответу igul я смог запустить это на машине с Windows.Были две проблемы:

  1. Путь к сценарию в контейнере Docker.
    Вместо:

    docker exec a_db /root/db/dev/init_db.sh
    

    должно быть:

    docker exec a_db root/db/dev/init_db.sh
    
  2. Окончания строки в init_db.sh.На машине с Windows после извлечения репозитория из конца строки bitbucket файл init_db.sh был настроен на CRLF, что вызвало проблему.Я добавил файл .gitattribute в репозиторий, и теперь файл init_db.sh всегда имеет LF-окончания.

0 голосов
/ 13 марта 2019

У меня была похожая проблема ... абсолютные пути с переменными windows исправили мои: $ HOME / Докер /...

...