-
-
Notifications
You must be signed in to change notification settings - Fork 2k
Description
When I deploy a new application and reboot the docker container restarts on another port so all the nginx mappings fail and the app can't be accessed.
Steps to reproduce:
- Push a brand new repo to dokku
- Reboot the machine
- Try to access the app.
You'll either the a 502 bad gateway error, or the wrong app (if the port got mapped to another app).
Here's an audit trail after I pushed a new app nodetest2.
After I initially pushed it, here's what the docker ps returned:
ID IMAGE COMMAND CREATED STATUS PORTS SIZE
3c6858a2eab4 app/nodetest2:latest /bin/bash -c /start 38 seconds ago Up 23 seconds 49160->5000 16.39 kB (virtual 985.9 MB)
Notice that it was listening on port 49160.
And cating the CONTAINER and PORT entries in the /home/git/nodetest2 did:
root@euge:/home/git/nodetest2# cat CONTAINER
3c6858a2eab4
root@euge:/home/git/nodetest2# cat PORT
49160
root@euge:/home/git/nodetest2# cat nginx.conf
upstream nodetest2 { server 127.0.0.1:49160; }
server {
listen 80;
server_name nodetest2.euge.co;
location / {
proxy_pass http://nodetest2;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
}
Looking at the config.json for the docker container gives:
{"ID":"3c6858a2eab44bac6bcd17e09d2749fd2fbe59289efcb981ac289308721851fb","Created":"2013-07-07T10:58:45.651908068Z","Path":"/bin/bash","Args":["-c","/start web"],"Config":{"Hostname":"3c6858a2eab4","User":"","Memory":0,"MemorySwap":0,"CpuShares":0,"AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"PortSpecs":["5000"],"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PORT=5000"],"Cmd":["/bin/bash","-c","/start web"],"Dns":null,"Image":"app/nodetest2","Volumes":{},"VolumesFrom":""},"State":{"Running":true,"Pid":3111,"ExitCode":0,"StartedAt":"2013-07-07T10:58:45.733151021Z","Ghost":false},"Image":"cb67ce2218ffc55c9e9ba52c7413246b0697edebcba01f63fdab3123a868ee74","NetworkSettings":{"IPAddress":"172.16.42.12","IPPrefixLen":24,"Gateway":"172.16.42.1","Bridge":"docker0","PortMapping":{"5000":"49160"}},"SysInitPath":"/usr/bin/docker","ResolvConfPath":"/etc/resolv.conf","Volumes":{}}
Everything is working and set to map to port 49160.
When I reboot, however, this is what docker ps shows:
ID IMAGE COMMAND CREATED STATUS PORTS SIZE
3c6858a2eab4 app/nodetest2:latest /bin/bash -c /start 11 minutes ago Up 11 seconds 49153->5000 16.39 kB (virtual 985.9 MB)
See how the port has now been mapped to 49153. Therefore the nginx port forwarding won't work and the app is inaccessible.
Checking the docker container file once again:
{"ID":"3c6858a2eab44bac6bcd17e09d2749fd2fbe59289efcb981ac289308721851fb","Created":"2013-07-07T10:58:45.651908068Z","Path":"/bin/bash","Args":["-c","/start web"],"Config":{"Hostname":"3c6858a2eab4","User":"","Memory":0,"MemorySwap":0,"CpuShares":0,"AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"PortSpecs":["5000"],"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PORT=5000"],"Cmd":["/bin/bash","-c","/start web"],"Dns":null,"Image":"app/nodetest2","Volumes":{},"VolumesFrom":""},"State":{"Running":true,"Pid":1029,"ExitCode":0,"StartedAt":"2013-07-07T11:09:05.82098963Z","Ghost":false},"Image":"cb67ce2218ffc55c9e9ba52c7413246b0697edebcba01f63fdab3123a868ee74","NetworkSettings":{"IPAddress":"172.16.42.3","IPPrefixLen":24,"Gateway":"172.16.42.1","Bridge":"docker0","PortMapping":{"5000":"49153"}},"SysInitPath":"/usr/bin/docker","ResolvConfPath":"/etc/resolv.conf","Volumes":{}}
And the port has changed to 49153.
I'm not sure what the solution is as my knowledge of docker is limited. You could rewrite the nginx conf file after reboot...
Strangely enough, however, when you do a SECOND push, then the whole thing works as it's not mapping to port 5000, and the port mappings stay correct the second push.
Not sure what the answer is.