Я пишу приложение 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, работающее в локальном режиме, он не может правильно копировать файлы.
Есть ли что-то очевидное, чего мне не хватает?