# Как пересобрать приложение, используя хост-сеть вместо сети Docker?

**URL:** https://meta.discourse.org/t/how-do-i-rebuild-app-using-the-host-network-rather-than-the-docker-network/193414
**Category:** Self-hosting
**Created:** [10.Июнь.2021 16:06:08 UTC](https://meta.discourse.org/t/how-do-i-rebuild-app-using-the-host-network-rather-than-the-docker-network/193414 "2021-06-10T16:06:08Z")
**Posts on this page:** 11
**Page:** 1

<div class="post-metadata">

### Author: ![snakeninny](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/snakeninny/32/115522_2.png) [@snakeninny](https://meta.discourse.org/u/snakeninny)
#### Post date: [10.Июнь.2021 16:06:08 UTC](https://meta.discourse.org/t/how-do-i-rebuild-app-using-the-host-network-rather-than-the-docker-network/193414/1 "2021-06-10T16:06:08Z")

</div>

Здравствуйте,

Иногда при выполнении обновлений через веб-интерфейс Discourse предлагает выполнить следующие команды:

```plaintext
cd /var/discourse
git pull
./launcher rebuild app

```

Так как процесс `rebuild` несколько раз обращается к GitHub, а в Китае, где расположен мой сервер, доступ к GitHub частично заблокирован, мне приходится настраивать HTTP/HTTPS-прокси для более стабильного доступа к GitHub. Ниже приведено сравнение доступа к YouTube без прокси и с прокси:

```plaintext
root@iosre:/var/discourse# wget https://youtube.com
--2021-06-10 23:55:05-- https://youtube.com/
Resolving youtube.com (youtube.com)... 66.220.152.17, 2001::3d6f:fadc
Connecting to youtube.com (youtube.com)|66.220.152.17|:443... ^C

```

```plaintext
root@iosre:/var/discourse# export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7891
root@iosre:/var/discourse# wget https://youtube.com
--2021-06-10 23:56:12-- https://youtube.com/
Connecting to 127.0.0.1:7890... connected.
Proxy request sent, awaiting response... 301 Moved Permanently
Location: https://www.youtube.com/ [following]
--2021-06-10 23:56:13-- https://www.youtube.com/
Connecting to 127.0.0.1:7890... connected.
Proxy request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html’

index.html [<=>] 510.58K 813KB/s in 0.6s    

2021-06-10 23:56:14 (813 KB/s) - ‘index.html’ saved [522830]

```

Однако при запуске `./launcher rebuild image` скрипт входит в контейнер приложения и выполняет все операции внутри Docker, где сетевая среда отличается от настроенной на хосте с прокси. Из-за этого доступ к YouTube становится невозможным, и процесс rebuild чаще всего завершается неудачей.

```plaintext
root@iosre:/var/discourse# ./launcher enter app
root@iosre-app:/var/www/discourse# wget https://youtube.com
--2021-06-10 15:59:57-- https://youtube.com/
Resolving youtube.com (youtube.com)... 69.171.248.128, 2001::d238:33c1
Connecting to youtube.com (youtube.com)|69.171.248.128|:443... ^C

```

```plaintext
root@iosre-app:/var/www/discourse# export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7891
root@iosre-app:/var/www/discourse# wget https://youtube.com
--2021-06-10 16:00:10-- https://youtube.com/
Connecting to 127.0.0.1:7890... failed: Connection refused.

```

Вопрос: что можно сделать, чтобы использовать прокси хоста внутри Docker, особенно при выполнении `./launcher rebuild app`?

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [12.Июнь.2021 12:00:52 UTC](https://meta.discourse.org/t/how-do-i-rebuild-app-using-the-host-network-rather-than-the-docker-network/193414/2 "2021-06-12T12:00:52Z")

</div>

Возможно, стоит посмотреть [Replace rubygems.org with taobao mirror to resolve network error in China](https://meta.discourse.org/t/replace-rubygems-org-with-taobao-mirror-to-resolve-network-error-in-china/21988?u=pfaffman)

Также есть шаблон для Китая, который вы можете включить. Вы можете найти его в папке с шаблонами. Я не совсем уверен, что именно он делает.

(Это не идеальный ответ, но прошло уже два дня, а у вас до сих пор нет ни одного.)

---

<div class="post-metadata">

### Author: ![snakeninny](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/snakeninny/32/115522_2.png) [@snakeninny](https://meta.discourse.org/u/snakeninny)
#### Post date: [12.Июнь.2021 13:40:33 UTC](https://meta.discourse.org/t/how-do-i-rebuild-app-using-the-host-network-rather-than-the-docker-network/193414/3 "2021-06-12T13:40:33Z")

</div>

Спасибо, Джей! Китайский шаблон зеркалит [rubygems.org](http://rubygems.org) через [gems.ruby-china.com](http://gems.ruby-china.com), который размещён taobao/alibaba.

Вдохновившись этой идеей, я попробую создать зеркало [github.com](http://github.com) на отечественном сервере, надеюсь, тоже размещённом у Alibaba.

---

<div class="post-metadata">

### Author: ![Ivan\_Rapekas](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ivan_rapekas/32/248924_2.png) [@Ivan\_Rapekas](https://meta.discourse.org/u/Ivan_Rapekas)
#### Post date: [13.Июнь.2021 07:48:24 UTC](https://meta.discourse.org/t/how-do-i-rebuild-app-using-the-host-network-rather-than-the-docker-network/193414/4 "2021-06-13T07:48:24Z")

</div>

Привет, @snakeninny, если я правильно понял вопрос, вам может понадобиться что-то вроде этого:

```plaintext
/var/discourse/launcher rebuild app --docker-args --net=host --skip-mac-address

```

В этом случае, вероятно, нужно изменить файл app.yml, секцию expose (просто выполните `netstat -ltupen`, чтобы найти реальный порт прослушивания контейнера).

---

<div class="post-metadata">

### Author: ![snakeninny](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/snakeninny/32/115522_2.png) [@snakeninny](https://meta.discourse.org/u/snakeninny)
#### Post date: [14.Июнь.2021 03:05:47 UTC](https://meta.discourse.org/t/how-do-i-rebuild-app-using-the-host-network-rather-than-the-docker-network/193414/5 "2021-06-14T03:05:47Z")

</div>

> [@Ivan\_Rapekas](#):
>
> ```plaintext
> /var/discourse/launcher rebuild app --docker-args --net=host --skip-mac-address
> 
> ```

Спасибо, Иван! Я выполнил это, но не изменил app.yml, чтобы открыть секцию. Как это сделать?

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [14.Июнь.2021 06:17:05 UTC](https://meta.discourse.org/t/how-do-i-rebuild-app-using-the-host-network-rather-than-the-docker-network/193414/6 "2021-06-14T06:17:05Z")

</div>

Откройте файл app.yml в текстовом редакторе и найдите строку “expose”.

---

<div class="post-metadata">

### Author: ![snakeninny](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/snakeninny/32/115522_2.png) [@snakeninny](https://meta.discourse.org/u/snakeninny)
#### Post date: [14.Июнь.2021 11:34:15 UTC](https://meta.discourse.org/t/how-do-i-rebuild-app-using-the-host-network-rather-than-the-docker-network/193414/7 "2021-06-14T11:34:15Z")

</div>

Я вижу это в секции expose файла app.yml:

```plaintext
expose:
  - "30080:80" # перенаправление порта хоста 80 на порт контейнера 80 (http)
  - "2222:22" # перенаправление порта хоста 2222 на порт контейнера 22 (ssh)

```

Нужно ли мне перенаправлять порт хоста 443 (https) на порт контейнера? На какой порт контейнера следует выполнять перенаправление?

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [14.Июнь.2021 14:09:25 UTC](https://meta.discourse.org/t/how-do-i-rebuild-app-using-the-host-network-rather-than-the-docker-network/193414/8 "2021-06-14T14:09:25Z")

</div>

Разве это не работало раньше? Я предполагаю, что ваш обратный прокси занимается обработкой HTTPS.

---

<div class="post-metadata">

### Author: ![snakeninny](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/snakeninny/32/115522_2.png) [@snakeninny](https://meta.discourse.org/u/snakeninny)
#### Post date: [15.Июнь.2021 01:55:12 UTC](https://meta.discourse.org/t/how-do-i-rebuild-app-using-the-host-network-rather-than-the-docker-network/193414/9 "2021-06-15T01:55:12Z")

</div>

Нет, не получилось. Как я уже описывал, я могу заходить на YouTube с хоста, но не из Docker.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [16.Июнь.2021 15:00:36 UTC](https://meta.discourse.org/t/how-do-i-rebuild-app-using-the-host-network-rather-than-the-docker-network/193414/10 "2021-06-16T15:00:36Z")

</div>

Ваша конфигурация слишком сложна, чтобы точно определить проблему. Рекомендую сначала настроить всё без обратного прокси. После этого ознакомьтесь с инструкциями: [Как установить Discourse на сервере с существующими сайтами Apache](https://meta.discourse.org/t/how-to-set-up-discourse-on-a-server-with-existing-apache-sites/30013) или [Запуск других веб-сайтов на том же компьютере, что и Discourse](https://meta.discourse.org/t/running-other-websites-on-the-same-machine-as-discourse/17247)

---

<div class="post-metadata">

### Author: ![Ivan\_Rapekas](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ivan_rapekas/32/248924_2.png) [@Ivan\_Rapekas](https://meta.discourse.org/u/Ivan_Rapekas)
#### Post date: [24.Июнь.2021 13:13:52 UTC](https://meta.discourse.org/t/how-do-i-rebuild-app-using-the-host-network-rather-than-the-docker-network/193414/11 "2021-06-24T13:13:52Z")

</div>

Привет, @snakeninny, извините за задержку.

Согласно вашей настройке `30080:80` в разделе expose, вам нужно лишь настроить прокси-запросы в вашем Nginx/Apache и т.д.

Например, моя настройка для Nginx (я использую 2080 вместо 30080):

`/etc/nginx/sites-available/00-default-ssl.conf`

```ruby
server {
...

        location / {
                # ЭТО ИСПОЛЬЗУЕТСЯ С NGINX, КОГДА DOCKER ЗАПУЩЕН ОБЫЧНЫМ СПОСОБОМ (РЕЖИМ BRIDGE)
                proxy_pass http://example.com:2080/;
                
                # ЭТИ ДВЕ СТРОКИ ИСПОЛЬЗУЮТСЯ, ЕСЛИ СЕТЕВАЯ МОДЕЛЬ DOCKER УСТАНОВЛЕНА В РЕЖИМ HOST (--net=host)
                #proxy_pass http://example.com:3000/;
                #proxy_redirect http://example.com:2080/ https://example.com;

                proxy_read_timeout 90;
                proxy_http_version 1.1;
                proxy_set_header Host $http_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;

                proxy_set_header X-Forwarded-Host $host;
                proxy_set_header X-Forwarded-Server $host;

                error_page 502 =502 /errorpages/discourse_offline.html;
                proxy_intercept_errors on;

    # ВЫ МОЖЕТЕ ИСКЛЮЧИТЬ ЗАПРОСЫ ОТ КОНКРЕТНОГО IP ИЗ ЖУРНАЛА ДОСТУПА
    if ( $remote_addr = "x.x.x.x" )
    {
        access_log off;
    }
        }

location /errorpages/ {
    alias /var/www/errorpages/;
}
}

```

Когда вы запускаете ваш контейнер в режиме хоста `(--net=host)`, вам следует рассмотреть возможность переключения настроек прокси на использование порта 3000 с перенаправлением (вероятно, через https, как в примере выше).
