Вы работаете с изображением ubuntu:16.04
и, по сути, делаете много работы, которую ребята из NodeJS уже сделали.
Я бы пошел на изображение node:10-stretch-slim
на вашем месте.Затем установите необходимые драйверы с помощью apt-get
(если доступно, в противном случае загрузите сценарий и установите его в Dockerfile
).
Команда sudo
обычно не устанавливается на образы докера, посколькупользователь по умолчанию root
в сеансах контейнера.Если вы видите какие-либо ошибки, связанные с sudo
, вы можете просто удалить sudo
из командной строки, которая вызывает проблему.
Возможное решение
Обновление моегоответ здесь, с возможным решением для вас.
Это решение поместит ваше приложение в образ узла 10, основанный на Debian Stretch 9. Он получит драйверы базы данных для вас из репозитория Debian 9 Microsoft и установит все пакеты, которые вы видите.требуя от вашего вопроса.
Я также добавил ENTRYPOINT
и CMD
в нижней части скрипта.Но эти строки - догадки, поскольку в вашем вопросе ничего не говорится о том, как вы на самом деле запускаете свое приложение.(Если вы добавите это, я обновлю свой ответ).
Примечание. Обратите внимание, что я передаю --host 0.0.0.0
команде npm run start
.Это сделано для того, чтобы избежать привязки живого сервера к локальному хосту, что сделает недоступным извне контейнера.Если вы не запустите контейнер с --network="host"
.
У вас может быть другое средство запуска приложения, которое более «продуктивно», чем живой сервер разработки.Если это так, просто замените строки в нижней части Dockerfile
, или спросите меня об этом ответе.
Dockerfile
# from debian stretch 9.8, node 10
FROM node:10-stretch-slim
# get apt-transport-https, etc., so that we can install by https protocol
RUN apt-get update \
&& apt-get install -y \
apt-transport-https \
build-essential \
make
# add and accept the microsoft signature
RUN curl -q https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
# retrieve the microsoft packagelist for debian 9
RUN curl -q https://packages.microsoft.com/config/debian/9/prod.list > /etc/apt/sources.list.d/mssql-release.list
# install the ms odbc sql driver and unixodbc header stuff
RUN apt-get update \
&& ACCEPT_EULA=Y apt-get install -y \
msodbcsql17 \
unixodbc-dev \
&& rm -rf /var/lib/apt/lists
# expose port 80 in containers of this image
EXPOSE 80
# copy working directory into the image and set as pwd
ADD . /var/www/app
WORKDIR /var/www/app
# install dependencies for the application
RUN npm install \
&& npm cache clean --force
# build the application
RUN npm run build
# i am just guessing how you want your app started here, npm?
ENTRYPOINT ["npm"]
# and then this, which makes "npm run start --host 0.0.0.0"
CMD ["run", "start", "--host", "0.0.0.0"]
Постройте изображениес помощью:
docker build -t mynodeapp:0.1 .
Запустите образ приложения с помощью:
docker run -p 3000:80 --name mynodeapp mynodeapp:01
Наконец, посетите: http://localhost:3000, чтобы увидеть, как оно работает.