Docker image from existing Rails / Unicorn / MySQL application

I am new to Docker and am experimenting building an image from an existing Rails / Unicorn / MySQL application. My files are below and the image is successfully generated, but I don't understand if everything really works fine as I cannot access the traditional Unicorn localhost url or boot2docker IP.

So my question is, how can I access the Unicorn server locally on OSX using the Docker image?

Dockerfile

# Dockerfile
FROM seapy/rails-nginx-unicorn

# Publish port 8080
EXPOSE 8080

CMD ["bundle", "exec","unicorn", "-p", "8080"]

      

Docker Image Run command

docker run --name games-app --link test-mysql:mysql -p 8080 -d -e SECRET_KEY_BASE=test sample_rails_games_app

PS Docker exit

docker ps
CONTAINER ID        IMAGE                    COMMAND                CREATED             STATUS              PORTS                     NAMES
cf9c45d62763        sample_rails_games_app   "bundle exec unicorn   17 minutes ago      Up 17 minutes       0.0.0.0:32777->8080/tcp   games-app
93485cb7bcca        mysql                    "/entrypoint.sh mysq   6 hours ago         Up 6 hours          3306/tcp                  test-mysql

      

If I try to press localhost:8080

or http://192.168.59.103:8080/

, I getGateway Timeout: can't connect to remote host

Docker logs output

docker logs cf9c45d62763
I, [2015-07-30T22:44:44.941674 #1]  INFO -- : listening on addr=0.0.0.0:8080 fd=9
I, [2015-07-30T22:44:44.941927 #1]  INFO -- : worker=0 spawning...
I, [2015-07-30T22:44:44.944000 #1]  INFO -- : master process ready
I, [2015-07-30T22:44:44.944836 #8]  INFO -- : worker=0 spawned pid=8
I, [2015-07-30T22:44:44.945103 #8]  INFO -- : Refreshing Gem list
I, [2015-07-30T22:44:46.729708 #8]  INFO -- : worker=0 ready

      

I've also tried boot2docker workarounds from here to no avail: https://github.com/boot2docker/boot2docker/blob/master/doc/WORKAROUNDS.md

Any guidance is greatly appreciated.

+1


source to share


1 answer


You must use the eth1 address of your boot2docker vm.

Run from shell:

boot2docker ssh

      

and then

ifconfig eth1
docker@boot2docker:~$ ifconfig eth1
eth1      Link encap:Ethernet  HWaddr 08:00:27:69:53:F6
          inet addr:192.168.59.103  Bcast:192.168.59.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe69:53f6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:170143 errors:0 dropped:0 overruns:0 frame:0
          TX packets:98176 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:107722766 (102.7 MiB)  TX bytes:13713741 (13.0 MiB)

docker@boot2docker:~$

      



192.168.59.103

- the address you want to use from your Mac. The port depends on which port you are sending. For example, in this case:

$ docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED              STATUS              PORTS                   NAMES
2e1d63d6928a        f6ac7e4116f3        "/usr/sbin/sshd -D -   3 hours ago         Up About an hour    0.0.0.0:32771->22/tcp   mad_jones
104f730aa7da        f6ac7e4116f3        "/usr/sbin/sshd -D -   3 hours ago         Up About an hour    0.0.0.0:32770->22/tcp   reverent_almeida

      

it's either 32771

or 32770

. In this example, the sshd server is running in your case, it will be your unicorn, which will be the port 32777

. So I think you are connecting to the correct address, but instead you need to connect to 32777

.

Hope it helps.

+1


source







All Articles