В этом Dockerfile есть куча вещей, которые потенциально могут пойти боком. Я прокомментирую их один за другим здесь:
#Download base image ubuntu 16.04
FROM ubuntu
Если вы собираетесь использовать изображение ubuntu:16.04
, вам необходимо указать его. Без специального тега инструкция FROM
будет искать тег latest
, в этом случае найдите изображение ubuntu:latest
для вас.
WORKDIR /dockerprojects
Эта команда устанавливает рабочий каталог внутри образа докера, чтобы при запуске контейнера сеансы PWD
были установлены на /dockerprojects
. Это важно, потому что все остальные команды во время сборки и при запуске контейнера будут относиться к этому расположению в файловой структуре.
#copy the zip file to docker folder
COPY /wso2telcohub-4.0.0-SNAPSHOT /home/myfolder/dockerprojects/IGW/dockerCI
Эта команда скопирует файл /wso2telcohub-4.0.0-SNAPSHOT
с "хост-машины", машины, на которой создается образ докера, в образ в расположении /home/myfolder/dockerprojects/IGW/dockerCI
. Если местоположение в образе еще не существует, оно создаст файл с именем dockerCI
в местоположении /home/myfolder/dockerprojects/IGW/
. Я не думаю, что это то, что вы хотите.
Кроме того, ваш комментарий гласит, что это zip-файл, но в нем, похоже, отсутствует расширение, например .zip
или .gz
- я считаю, что вы не правильно ссылаетесь на файл.
COPY cp /wso2is-km-5.6.0 /home/myfolder/dockerprojects/IGW/dockerCI
Эта инструкция не будет выполнена. Для инструкции COPY вам не нужно использовать команду "cp". Однако, если вы удалите «cp» из строки, он попытается скопировать файл или каталог /wso2is-km-5.6.0
с хост-машины (это файл в корне файловой системы) в папку /home/myfolder/dockerprojects/IGW/dockerCI
внутри полученного изображения.
CMD [“bash”]
Инструкция CMD просто устанавливает образ для запуска новой оболочки bash при запуске, что заставит контейнер немедленно завершиться после выполнения команды bash
.
У меня такое ощущение, что исходное местоположение файлов, которые вы хотите поместить в образ, находится не в корне хост-машины. Но, вероятно, на /home/myfolder/dockerprojects/
на хосте, который вы упоминаете. Я попросил вас уточнить местоположение файлов, которые вы хотите на изображении, в комментарии к вашему вопросу.
Обновление
Ошибка, которую вы получаете, «нет такого файла или каталога» означает, что исходный файл, на который вы ссылаетесь в инструкции COPY
, не существует.
Инструкция COPY
работает следующим образом:
COPY <sourcepath> <targetpath>
Где <sourcepath>
- это путь к файлу на машине, где строится образ. Этот путь относится к Dockerfile (или контексту сборки, если указан), если он не начинается с /
, то он относится к корню файловой системы на хост-компьютере. И targetpath
- это желаемый путь внутри получившегося изображения.
Допустим, у меня следующая структура папок:
/home/myfolder/dockerprojects/
├── Dockerfile
├── wso2telcohub-4.0.0-SNAPSHOT.zip
├── wso2is-km-5.6.0/
│ ├── anotherfile.txt
И я хотел, чтобы все файлы в пути /home/myfolder/dockerprojects/
были помещены в образ докера, ниже пути /app
. Я бы сделал это с Dockerfile вроде:
FROM ubuntu:16.04
WORKDIR /app
COPY . /app/
Или каждый файл по отдельности, например:
FROM ubuntu:16.04
WORKDIR /app
COPY ./wso2telcohub-4.0.0-SNAPSHOT.zip /app/wso2telcohub-4.0.0-SNAPSHOT.zip
COPY ./wso2is-km-5.6.0 /app/wso2is-km-5.6.0
Это оставило бы меня с изображением докера:
/app/
├── Dockerfile
├── wso2telcohub-4.0.0-SNAPSHOT.zip
├── wso2is-km-5.6.0/
│ ├── anotherfile.txt