Файл Docker неправильно копирует файлы в подкаталоги при загрузке на локальное устройство Balena из Windows 10 - PullRequest
2 голосов
/ 08 марта 2019

Я пишу приложение Typescript, которое хочу запустить на нескольких Raspberry Pis, управляемых и развернутых с помощью Balena. Мой компьютер под управлением Windows 10. Я довольно плохо знаком с Balena и Docker.

Я пытаюсь скомпилировать свою машинопись в файле Docker, но команда COPY, похоже, неправильно копирует файлы в подкаталогах при передаче на устройство Balena, работающее в локальном режиме.

У меня очень простая файловая структура, так как я только что начал проект:

Dockerfile
start.sh
src/
- index.ts
- tsconfig.json

Мой Dockerfile выглядит следующим образом:

FROM resin/raspberrypi3-node:10.0.0
WORKDIR /usr/src/app
COPY package.json package.json
COPY package-lock.json package-lock.json
RUN npm i -g typescript
RUN JOBS=MAX npm install --production --unsafe-perm && npm cache verify && rm -rf /tmp/*

COPY . ./
RUN tsc -p src
CMD ["bash", "start.sh"]

При сборке и отправке изображения на устройство Balena в локальном режиме я получаю следующую ошибку, когда выполнение Dockerfile достигает команды 'RUN tsc -p src':

[Build]   [main] Step 8/11 : RUN tsc -p src
[Build]   [main]  ---> Running in b843b59050da
[Build]   [main] error TS5058: The specified path does not exist: 'src'.
Some services failed to build:
        main: The command '/bin/sh -c tsc -p src' returned a non-zero code: 1

Аналогично, я не могу перейти в подкаталог и просто запустить команду tsc оттуда:

[Build]   [main] Step 8/11 : RUN cd src
[Build]   [main]  ---> Running in 7620e8a516f3
[Build]   [main] /bin/sh: 1: cd: can't cd to src

Я вставил команду 'RUN ls' в свой Dockerfile перед тем, как 'RUN tsc -p src', чтобы убедиться, что файлы копируются, и выводит следующее:

[Build]   [main] Step 8/11 : RUN ls
[Build]   [main]  ---> Running in bf8b3c63454e
[Build]   [main] CHANGELOG.md
[Build]   Dockerfile
[Build]   README.md
[Build]   node_modules
[Build]   package-lock.json
[Build]   package.json
[Build]   src\index.ts
[Build]   src\tsconfig.json
[Build]   start.sh
[Build]   [main] Removing intermediate container bf8b3c63454e
[Build]   [main]  ---> 27ed6ea5eb9b
[Build]   [main] Step 9/11 : RUN tsc -p src
[Build]   [main]  ---> Running in 6ac5f86b5637
[Build]   [main] error TS5058: The specified path does not exist: 'src'.

На первый взгляд кажется, что подкаталог скопирован правильно, но - поправьте меня, если я ошибаюсь - ls не должен иметь возможность перечислять файлы из подкаталогов, и кажется, что команда COPY каким-то образом сгладила подкаталог. Честно говоря, я совершенно не уверен, что случилось.

Стоит отметить: проект прекрасно компилирует TS, когда просто запускает 'tsc -p src' с терминала моего компьютера разработчика, и файлы копируются правильно, когда вы отправляете проект на устройство Balene, НЕ работающее в локальном режиме. Когда я отправляю проект на устройство Balena, работающее в локальном режиме, он не может правильно копировать файлы.

Есть ли что-то очевидное, чего мне не хватает?

...