@bengur2

Как отдавать docker container с сервера по адресу домена?

На виртуально машине успешно запущен контейнер.

Dockerfile:
FROM node:latest

WORKDIR /usr/src/app

ARG NODE_ENVn
ENV NODE_ENV $NODE_ENV

COPY package*.json /usr/src/app/
RUN npm install

COPY . /usr/src/app

ENV PORT 5000
EXPOSE $PORT
CMD [ "npm", "start" ]


Запуск:
sudo docker run -d -p 27073:5000 $CI_REGISTRY_IMAGE/$CI_COMMIT_BRANCH:latest


Проверяем:
sudo docker container ls
CONTAINER ID   IMAGE                                           COMMAND                  CREATED       STATUS       PORTS
******************   registry.gitlab.com/*******:latest   "docker-entrypoint.s…"   9 hours ago   Up 9 hours   0.0.0.0:27073->5000/tcp, :::27073->5000/tcp

kYMhrRA.png

Как я понимаю, теперь на виртуально машине есть контейнер, который вне Доккера должен быть доступен по порту 27073.

Всё ли я правильно сделал?
Как отдавать контейнер наружу, чтобы он был доступен по домену mysite.com?

UPD 1:
Виртуальная машина - Google Computed Engine.
Есть публичный IP.

UPD 2:
Направил домен на IP сервера, получаю ошибку.
504 Gateway Time-out
The server didn't respond in time.

UUauR4s.png

UPD 3:
Я указал порт 27073 только для того, чтобы у каждого контейнера был свой порт.
Т.к. хочу разные контейнеры отдавать на разные домены.
Возможно, что-то делаю не так :(

UPD 4:
curl http://localhost:27073
Возвращает мой html
  • Вопрос задан
  • 335 просмотров
Решения вопроса 1
@MadridianFox
Web-программист, многостаночник
Домен привязывается не к контейнеру, а к ip адресу.
Вы не уточнили где именно поднята эта виртуальная машина и с какой целью.

Если у вас на компьютере для личного использования, то проще всего использовать nip.io или прописать соотвествие домена и ip адреса виртуальной машины в файле hosts.

Если вы арендовали виртуальную машину у какого-то провайдера и хотите сделать её доступной для всех по домену, то нужно купить домен и в его настройках указать ip адрес виртуальной машины.
Ну или использовать всё тот же nip.io если это общий сервис для малого круга лиц.

UPD:

чтобы по разным доменам открывались разные веб-приложения, вам необходим http прокси, который на основании домена, указанного в http запросе, будет проксировать этот запрос на тот или иной внутренний адрес.
Обычно для этого устанавливают nginx, который сам слушает 80 и 443 порты.
Все домены настраивают так, чтобы вели на адрес этого сервера.
В конфиге nginx описывают какое приложение должно отвечать по определённому домену, примерно вот так:

server {
    listen 80;
    server_name site-1.domain.com;
    location / {
        proxy_pass http://127.0.0.1:27073;
    }
}
server {
    listen 80;
    server_name site-2.domain.com;
    location / {
        proxy_pass http://127.0.0.1:12345;
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы