У меня есть приложение узла Typescript.Основной файл server.ts
.Я хочу запустить это приложение в контейнере Docker.У меня есть шаг сборки в моем Dockerfile
, который выполняет транспонирование Typescript, например:
FROM node:9.9 as build
WORKDIR /app
COPY package*.json ./
COPY ... # copy the source files to the docker container
RUN npm install && \
npm run build # <-- runs Typescript transpile
FROM node:9.9
COPY --from=build /path/to/source/files /app
WORKDIR /path/to/server.js directory
CMD ["node", "server.js"]
Я использую docker-compose
для настройки контейнера для разработки
my-app:
build:
context: /path/to/build/context
dockerfile: Dockerfile
command: bash -c "npm install -g nodemon && nodemon server.js"
network_mode: "host"
volumes:
- /path/to/server.js/directory/local:/path/to/server.js/directory/in/container
Поскольку Typescriptпередается на этапе построения образа, в контейнере создается файл server.js
.Поэтому, если я запускаю docker-compose
без включенных томов, файл server.js
будет там, и контейнер начнет нормально.Если я запускаю docker-compose
с томами, файла server.js
там нет, просто server.ts
.Я думаю это потому, что локально у меня нет server.js
, поскольку он создается на этапе построения образа, а поскольку том ссылается на этот каталог, его нет в контейнере.Можно ли каким-либо образом собрать контейнер и перенести js
файлы из фазы сборки в этот том?