'Running Ngrok in a container using docker

[https://github.com/gtriggiano/ngrok-tunnel ] runs ngrok inside a container. Ngrok is required to run in the container to avert security risks. But am facing problems after running the scripts, which generates the url

$ docker pull gtriggiano/ngrok-tunnel


$ docker run -it  -e "TARGET_HOST=localhost" -e "TARGET_PORT=3000" -p 4040 gtriggiano/ngrok-tunnel

enter image description here am running my rails app on localhost:3000

is it my problem or can it be fixed by altering the scripts(inside the repo)?



Solution 1:[1]

No. if you execute -p with single number it's container port - host port is randomly assigned. Using -p, --publish ip:[hostPort]:containerPort at docker run can specify the the host port with the container port.

as of now the 4040 of container is exposed. Not sure if your service listens by default on it.

To get localhost port execute

docker ps

you'll see the actual port it's not listening on.

CONTAINER ID        IMAGE                     COMMAND             CREATED              STATUS              PORTS                     NAMES
1aaaeffe789d        gtriggiano/ngrok-tunnel   "npm start"         About a minute ago   Up About a minute   0.0.0.0:32768->4040/tcp   wizardly_poincare

here it's listening on localhost:32768

Solution 2:[2]

I couldn't get this working but switched to https://github.com/shkoliar/docker-ngrok and it works brilliantly.

In my case I added it to my docker-compose.yml file:

ngrok:
    image: shkoliar/ngrok:latest
    ports:
      - 4551:4551
    links:
      - web
    environment:
      - PARAMS=http -region=eu -authtoken=${NGROK_AUTH_TOKEN} localdev.docker:80
    networks:
      dev_net:
        ipv4_address: 10.5.0.10

And it's started with everything else when I do docker-compose up -d

Then there's a web UI at http://localhost:4551/ for you to see the status, requests, the ngrok URLs, etc.

The Github page does have examples of running it manually from the command line too though, rather than via docker-compose:

Command-line Example The example below assumes that you have running web server docker container named dev_web_1 with exposed port 80.

docker run --rm -it --link dev_web_1 shkoliar/ngrok ngrok http dev_web_1:80

With command line usage, ngrok session is active until it won't be terminated by Ctrl+C combination.

Solution 3:[3]

I'm not sure if you have already solved this but when I was getting this error I could only solve it like this:

# docker-compose.yml

networks:
  - development

I also needed to expose the 3000 port of my web container because it still wasn't exposed.

# docker.compose.yml

web:
  expose:
    - "3000"

My container for the server running on development is also under the development network. The only parameters, I believe, you should pass for the container to execute are image, ports, environment with DOMAIN and PORT for the server container, a link, and an expose on your web container:

# docker-compose.yml

  ngrok:
    image: shkoliar/ngrok
    ports:
      - 4551:4551
    links:
      - web
    networks:
      - development
    environment:
      - DOMAIN=squad_web
      - PORT=3000

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 v_sukt
Solution 2
Solution 3