I have some trouble forwarding ports that are LocalForward
to the container via SSH Tunnel.
The whole network looks like this:
This is my Dockerfile
for the GW Container
:
FROM ubuntu:latest
RUN apt-get update \
&& apt-get install -y ssh \
&& apt-get clean
EXPOSE 80
COPY config /root/.ssh/config
ENTRYPOINT ["ssh", "app-server", "sleep infinity & wait"]
Related ssh config
file:
Host vpn-gateway
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
Hostname 10.20.30.40
User matrix
Host app-server
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
Hostname 20.30.40.50
User matrix
ProxyCommand ssh vpn-gateway nc %h %p %r
LocalForward 80 30.40.50.60:1080
Now, I am using docker-compose
for container orchestration with the following docker-compose.yml
file:
version: "3.2"
services:
gateway:
container_name: gateway
image: gateway
build: ./docker/gateway
volumes:
- ~/.ssh/id_rsa:/root/.ssh/id_rsa
- ~/.ssh/id_rsa.pub:/root/.ssh/id_rsa.pub
ports:
- 8080:80
So, the idea is that if I run wget from localhost:
wget http://127.0.0.1:8080/api/health
I will get a response from the API Server
machine (30.40.50.60:1080
). The problem is that I get reset:
--2018-06-25 07:19:26-- http://127.0.0.1:8080/api/health
Connecting to 127.0.0.1:8080... connected.
HTTP request sent, awaiting response... Read error (Connection reset by peer) in headers.
Retrying.
--2018-06-25 07:19:27-- (try: 2) http://127.0.0.1:8080/api/health
Connecting to 127.0.0.1:8080... connected.
HTTP request sent, awaiting response... Read error (Connection reset by peer) in headers.
Retrying.
This could be caused by Docker not seeing any app using port 80 on the GW Container
as mentioned here: https://serverfault.com/a/769583/292211
If I exec
to the GW Container
and run wget http://127.0.0.1:80/api/health
I am getting a proper response.
Is there a way to cheat docker into thinking port 80 is available in the GW Container
so it would allow me to forward port to the host? Or could any of these things be handled in a better way? All the mumbo-jumbo with SSH tunnels is due to third-party security restrictions.
Thanks!