PHPStorm + docker + tunel xdebug + db ssh

0

Lokalnie mam następującą konfigurację docker-compose:

nginx:
  build:
    context: ./nginx
  ports:
    - "80:80"
  volumes:
    - ./../logs:/home/web/logs/
    - ./../:/home/web/my-website.com/
  depends_on:
    - php
php:
  build:
    context: ./php
  volumes:
    - ./../:/home/web/my-website.com/
  working_dir: /home/web/my-website.com/
  expose:
    - "8123"

php kontener ma zainstalowany xdebug, mogę łatwo połączyć się z nim z PHPStorm. Mam zdalną bazę danych ClickHouse, która jest podłączona przez tunel SSH. Po uruchomieniu kontenera po prostu wchodzę do kontenera i wykonuję:

ssh -4 [email protected] -p 2211 -L 8123:localhost:8123 -oStrictHostKeyChecking=no -Nf

Po tym moja strona może korzystać z tego połączenia, ale gdy wykonam polecenie konsoli

./yii analysis/start-charts 003b56fe-db47-11e8-bcc0-52540010e5bc 205

z PHPStorm, otrzymuję wyjątek:

Failed to connect to 127.0.0.1 port 8123: Connection refused

Jeśli wskoczę do kontenera i uruchomię to samo polecenie, wszystko działa prawidłowo.

Co jest nie tak? Dlaczego PHPStorm nie widzi mojego tunelu ssh?

UPD Zmieniłem hosta kontenera clickhouse na doker i zmieniłem php definicja kontenera na następujące:

php:
  build:
    context: ./php
  volumes:
    - ./../:/home/web/my-website.com/
  working_dir: /home/web/my-website.com/
  expose:
    - "8123"
  ports:
    - "8123:8123"

Teraz wszystko działa

Nikita Leshchev
źródło

Odpowiedzi:

1

Twój tunel ssh jest tworzony wewnątrz kontenera na gnieździe 127.0.0.1:8123. Narażasz Port 8123 na Hosta (być może powinieneś ujawnić 127.0.0.1:8123). Ale rzeczywisty problem polega na tym, że próbujesz uzyskać dostęp 127.0.0.1:8123 z komputera hosta, podczas gdy powinieneś uzyskać dostęp <ContainerIP>:8123.

Możesz spróbować zmienić tryb sieciowy Użyj network_mode: "host" w twoim pliku kompozytowym jako rozwiązanie.

Ben
źródło
1
Dziękuję za odpowiedź, która mi pomogła. Ale muszę dodać, że musiałem dodać ports węzeł do definicji php pojemnik. Dodaję tę edycję do pytania
Nikita Leshchev