Как перенести машинописный текст в javascript на томе Docker? - PullRequest
0 голосов
/ 08 июня 2018

У меня есть приложение узла 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 файлы из фазы сборки в этот том?

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Если я правильно вас понимаю, вы пытаетесь поддерживать два разных сценария:

  • использовать предварительно собранную / перенесенную версию вашего кода (сценарий по умолчанию)
  • , еслиуказан том, используйте / горячий код из подключенного тома (сценарий разработки)

У меня нет опыта работы с вашей конкретной ситуацией, но в ситуациях, когда я хотел поддерживать разные сценарии времени выполненияЯ бы поместил эту логику в сценарий bash и установил этот сценарий в качестве точки входа.

Например,

# ...
COPY run-script run-script

# ...

ENTRYPOINT ["/bin/bash", "run-script"]

И ваш run-script может сделать что-то вроде проверки, еслиопределенный каталог / путь существует, и выполните действие, отличное от того, которое используется по умолчанию для простого запуска связанного сценария.

0 голосов
/ 08 июня 2018

Идея состоит в том, чтобы скопировать ваши перенесенные файлы в другую папку во время создания образа и связать их с каталогом /path/to/server.js/directory/in/container перед запуском node.command в docker-compose будет выглядеть примерно так:

command: bash -c "ln -s /path/to/built/files /path/to/server.js/directory/in/container; npm install ..."
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...