Как получить доступ к контейнеру docker в Интернете?

#docker #google-cloud-platform

# #docker #google-cloud-platform

Вопрос:

У меня есть экземпляр виртуальной машины Google Cloud под управлением Ubuntu 18, и я установил ngnix и извлек этот образ docker https://github.com/lensesio/fast-data-dev . Но проблема в том, что я не могу получить доступ к контейнеру при выполнении следующей команды

 docker run -d -p 2181:2181 -p 3030:3030 -p 8081-8083:8081-8083 
       -p 9581-9585:9581-9585 -p 9092:9092 -e ADV_HOST=[VM_EXTERNAL_IP] 
       -e RUNNING_SAMPLEDATA=1 lensesio/fast-data-dev
 

Предполагается, что он работает с myexternalip: 3030, но он не открывается. Я предполагаю, потому что я должен предоставлять порты docker для внешнего Интернета, потому что

 curl 0.0.0.0:3030
 

возвращает ответ. Я открыл упомянутые порты в приведенной выше команде в брандмауэре.

Комментарии:

1. Включен ли брандмауэр, подобный ufw, на виртуальной машине Ubuntu?

2. что говорят журналы docker?

3. Fwiw, пожалуйста, не предоставляйте Kafka или Zookeeper несанкционированный доступ через Интернет

Ответ №1:

Вам необходимо убедиться, что те порты, которые вы предоставляете в docker, открыты как в экземпляре, так и в брандмауэре VPC.

В Google Cloud вы можете развернуть контейнер внутри экземпляра Compute Engine при его создании (см. раздел Развертывание контейнера на новой виртуальной машине instace).

Это проще (и быстрее), чем делать это самостоятельно, и все сопоставления портов вашего контейнера определяются в том же месте, где вы открываете порты брандмауэра.

Кстати, не используйте IP-адрес 0.0.0.0: это неуказанный адрес newtwork. Это может быть отфильтровано брандмауэрами или маршрутизаторами. Используйте адрес обратной связи — 127.0.0.1

Ответ №2:

Чтобы открыть порт 3030 на общедоступном IP (VM_EXTERNAL_IP) в экземпляре, на уровне VPC в брандмауэре должно быть правило для конкретного протокола / порта, разрешающее это.[1]

Общее определение правила брандмауэра с широкой областью действия будет [2]:

gcloud compute --project=[PROJECT] firewall-rules create allow-lenses-io-3030 --direction=INGRESS --priority=1000 --network=default --action=ALLOW --rules=tcp:3030 --source-ranges=0.0.0.0/0

Вы можете ограничить область действия правила по мере необходимости / необходимости / необходимости.[3]

[1] https://cloud.google.com/vpc/docs/firewalls

[2] https://cloud.google.com/sdk/gcloud/reference/compute/firewall-rules/create

[3] https://cloud.google.com/vpc/docs/using-firewalls

Ответ №3:

Запустил это на своей виртуальной машине, и я получил эту ошибку:

 docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http:///var/run/docker.sock/v1.24/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.
 

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

 ~$ ls -la /var/run/docker.sock
 

После изменения разрешения файла на 666, выполнив эту команду ниже:

 sudo chmod 666 /var/run/docker.sock
 

Это должно быть разрешение на доступ к файлу

 srw-rw-rw- 1 root docker 0 Dec 17 14:40 /var/run/docker.sock
 

Затем я смог успешно выполнить вашу команду

 docker run -d -p 2181:2181 -p 3030:3030 -p 8081-8083:8081-8083 -p 9581-9585:9581-9585 -p 9092:9092 -e ADV_HOST=[VM_EXTERNAL_IP] -e RUNNING_SAMPLEDATA=1 lensesio/fast-data-dev
Unable to find image 'lensesio/fast-data-dev:latest' locally
latest: Pulling from lensesio/fast-data-dev
05e7bc50f07f: Pull complete 
476521bd3084: Pull complete 
c4c2aa517a1c: Pull complete 
7f1b06a24ab4: Pull complete 
bae2eaa88cbb: Pull complete 
2d9ee69ece21: Pull complete 
4da70d410da1: Pull complete 
59abe7119ed3: Pull complete 
ed6eaf2a0a19: Pull complete 
25aa81bc4e49: Pull complete 
8ccac59252e2: Pull complete 
225a5ca8c99d: Pull complete 
6d7f2dab62f4: Pull complete 
Digest: sha256:a40302e35e1e11839bcfe12f6e63e0d665f098249e0ce9c111a2e212215f8841
Status: Downloaded newer image for lensesio/fast-data-dev:latest
051711522df0198d2f94825dee8d2556e137c7b31501b68cd73541ae8d4286d7
 

Комментарии:

1. 1) не используйте chmod 666 в сокете Docker 2) все, что вам нужно было сделать, это sudo docker run 3) это не дает ответа на вопрос, как получить внешний доступ к контейнеру по сети