Использование / etc / hosts с докером

var names = [{
        name: "Joe",
        age: 20,
        email: "joe@hotmail.com"
    },
    {
        name: "Mike",
        age: 50,
        email: "mike@hotmail.com"
    },
    {
        name: "Joe",
        age: 45,
        email: "mike@hotmail.com"
    }
];
const res = _.filter(names, (name) => {
    return name.name == "Joe" && name.age < 30;

});
console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.js"></script>

1
задан user1104854 1 April 2019 в 00:44
поделиться

3 ответа

Вы можете использовать jwilder / nginx-proxy , это обратный прокси-сервер, автоматически конфигурируемый env-переменными других контейнеров, поэтому вам не нужно вручную писать конфигурации прокси-серверов nginx. Также по запросу он позволяет использовать определенный порт для пересылки запросов.

# docker-compose.yml

version: '3.3'

services:

  lamp:
    environment:
      VIRTUAL_HOST: some_domain.dev
      VIRTUAL_PORT: 9999
    image: my_lamp_image

  app:
    environment:
      VIRTUAL_HOST: another_domain.dev
      VIRTUAL_PORT: 3000
    image: my_app_image

  nginx-proxy:
    image: jwilder/nginx-proxy
    ports:
      - 80:80
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
# /etc/hosts

127.0.0.1 some_domain.dev
127.0.0.1 another_domain.dev

jwilder/nginx-proxy имеет много других приятных функций, таких как ssl, uwsgi, fastcgi и может также использоваться в производстве. Есть также «сопутствующие» дополнения, такие как , давайте зашифруем ssl и man в среднем прокси .

0
ответ дан artemkloko 1 April 2019 в 00:44
поделиться

Похоже, ваш сервер apache работает через порт 80 внутри контейнера. Если вы хотите использовать dockertest.com снаружи с вашей записью / etc / hosts, тогда вам также нужно использовать порт 80 для внешней стороны.

  1. введите /etc/hosts запись для домена dockertest.com
  2. Если вы используете docker, запустите его с -p 80:80 или если вы используете docker-compose
[110 ]
0
ответ дан d-h-e 1 April 2019 в 00:44
поделиться

Одна возможность состоит в том, чтобы настроить все приложения в их отдельных контейнерах и затем соединить их через докерскую сеть .

И чтобы охватить все контейнеры, я бы предложил добавить контейнер веб-сервера nginx в сеть в качестве обратного прокси-сервера, который затем можно привязать к порту 80 вашей машины.

Затем вы можете либо определить location для каждого приложения отдельно, либо определить одно общее местоположение, например,

# sample.conf
server {
  listen 80 default_server;
  server_name ~ (?<docker_host_name>.+);
  location ~ {
    # for actual request forwarding
    proxy_pass                         http://$docker_host_name$1$is_args$args;
    # some stuff I figured out I have to use in order for service to work properly
    proxy_set_header                   Upgrade $http_upgrade;
    proxy_set_header                   Connection 'upgrade';
    proxy_http_version                 1.1;
    proxy_cache_bypass                 $http_upgrade;
    proxy_set_header Host              $host;
    proxy_set_header X-Real-IP         $remote_addr;
    proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}

Эта конфигурация должна быть встроена в исходный /etc/nginx/nginx.conf или в отдельный файл. это входит в конфигурационный блок http.

После перезапуска службы или контейнера nginx (в зависимости от настройки контейнера) вы сможете подключиться ко всем службам в сети Docker, и все службы смогут без проблем взаимодействовать друг с другом.

Конечно, вы все равно должны хранить записи в файле hosts, поэтому ваш компьютер знает, что он должен обрабатывать запрос локально.

Редактировать:

Исходная конфигурация (вероятно) не делает то, что она должна делать. Итак, я придумал более новую версию, которая должна выполнить работу:

# sample.conf
server {
  listen 80 default_server;
  location ~ {
    # for actual request forwarding
    proxy_pass                         http://$host$1$is_args$args;
    # some stuff I figured out I have to use in order for service to work properly
    proxy_set_header                   Upgrade $http_upgrade;
    proxy_set_header                   Connection 'upgrade';
    proxy_http_version                 1.1;
    proxy_cache_bypass                 $http_upgrade;
    proxy_set_header Host              $host;
    proxy_set_header X-Real-IP         $remote_addr;
    proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}

С этой конфигурацией сервер nginx будет прослушивать все входящие запросы через порт 80 и перенаправлять их в соответствующий контейнер. внутри сети. Вам также не нужно настраивать разрешение хоста самостоятельно, так как имена контейнеров докеров также представляют хост (-name) контейнера.

Надеюсь, это сработает для вас.

0
ответ дан joernneumeyer 1 April 2019 в 00:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: