#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:
Запустил это на своей виртуальной машине, и я получил эту ошибку:
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) это не дает ответа на вопрос, как получить внешний доступ к контейнеру по сети