mirror of
https://github.com/vmorganp/Lazytainer.git
synced 2025-12-24 06:28:08 +01:00
add multi-port support
This commit is contained in:
35
README.md
35
README.md
@@ -18,11 +18,32 @@ $ cd Lazytainer
|
|||||||
$ docker-compose up
|
$ docker-compose up
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Or put in your docker compose
|
||||||
|
```
|
||||||
|
lazytainer:
|
||||||
|
container_name: lazytainer
|
||||||
|
build: .
|
||||||
|
environment:
|
||||||
|
- PORT=81,82 # comma separated list of ports...or just the one
|
||||||
|
- LABEL=lazytainer # value of com.lazytainer.marker for other containers that lazytainer checks
|
||||||
|
# - TIMEOUT=30 # OPTIONAL number of seconds to let container idle
|
||||||
|
# - RXHISTLENGTH=10 # OPTIONAL number of seconds to keep rx history, uptime is calculated as first item and last item from this and must have a gap of at least $MINPACKETTHRESH
|
||||||
|
# - MINPACKETTHRESH=10 # OPTIONAL number of packets that must be recieved to keepalive/start container
|
||||||
|
ports:
|
||||||
|
- 81:81
|
||||||
|
volumes:
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
|
|
||||||
|
whoami1:
|
||||||
|
container_name: whoami1
|
||||||
|
image: containous/whoami
|
||||||
|
command: --port 81 # make this run on the port passed through on lazytainer
|
||||||
|
network_mode: service:lazytainer
|
||||||
|
depends_on:
|
||||||
|
- lazytainer # wait for lazytainer to start before starting
|
||||||
|
labels:
|
||||||
|
- "com.lazytainer.marker=lazytainer" # required label to make it work
|
||||||
|
```
|
||||||
|
|
||||||
## TODO
|
## TODO
|
||||||
- support multiple ports
|
- improve logging - verbosity flags
|
||||||
- test on common services
|
|
||||||
- docker security probably? this really shouldn't be getting exposed except to forward traffic so idk probably firewall all non listed ports?
|
|
||||||
- improve logging
|
|
||||||
- inevitable bugfixes
|
|
||||||
- ???
|
|
||||||
- profit
|
|
||||||
@@ -4,22 +4,33 @@ services:
|
|||||||
container_name: lazytainer
|
container_name: lazytainer
|
||||||
build: .
|
build: .
|
||||||
environment:
|
environment:
|
||||||
- PORT=81 # TODO make this work with more than one port
|
- PORT=81,82 # comma separated list of ports...or just the one
|
||||||
- LABEL=lazytainer # value of com.lazytainer.marker for other containers that lazytainer checks
|
- LABEL=lazytainer # value of com.lazytainer.marker for other containers that lazytainer checks
|
||||||
- TIMEOUT=30 # number of seconds to let container idle
|
# - TIMEOUT=30 # OPTIONAL number of seconds to let container idle
|
||||||
|
# - RXHISTLENGTH=10 # OPTIONAL number of seconds to keep rx history, uptime is calculated as first item and last item from this and must have a gap of at least $MINPACKETTHRESH
|
||||||
|
# - MINPACKETTHRESH=10 # OPTIONAL number of packets that must be recieved to keepalive/start container
|
||||||
ports:
|
ports:
|
||||||
- 81:81
|
- 81:81
|
||||||
|
- 82:82
|
||||||
volumes:
|
volumes:
|
||||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
|
|
||||||
whoami2:
|
whoami1:
|
||||||
container_name: whoami2
|
container_name: whoami1
|
||||||
image: containous/whoami
|
image: containous/whoami
|
||||||
command: --port 81
|
command: --port 81
|
||||||
network_mode: service:lazytainer
|
network_mode: service:lazytainer
|
||||||
depends_on:
|
depends_on:
|
||||||
- lazytainer
|
- lazytainer
|
||||||
# ports:
|
labels:
|
||||||
# - 80:80
|
- "com.lazytainer.marker=lazytainer"
|
||||||
|
|
||||||
|
whoami2:
|
||||||
|
container_name: whoami2
|
||||||
|
image: containous/whoami
|
||||||
|
command: --port 82
|
||||||
|
network_mode: service:lazytainer
|
||||||
|
depends_on:
|
||||||
|
- lazytainer
|
||||||
labels:
|
labels:
|
||||||
- "com.lazytainer.marker=lazytainer"
|
- "com.lazytainer.marker=lazytainer"
|
||||||
@@ -33,6 +33,27 @@ func main() {
|
|||||||
min_packet_threshhold = 10
|
min_packet_threshhold = 10
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ports to check for active connections
|
||||||
|
ports := os.Getenv("PORT")
|
||||||
|
check(err)
|
||||||
|
if ports == "" {
|
||||||
|
panic("you must set a port for this to work")
|
||||||
|
}
|
||||||
|
ports_arr := strings.Split(string(strings.TrimSpace(string(ports))), ",")
|
||||||
|
portsarg := ""
|
||||||
|
for i, port := range ports_arr {
|
||||||
|
if i == 0 {
|
||||||
|
portsarg += "'"
|
||||||
|
}
|
||||||
|
if i +1 < len(ports_arr){
|
||||||
|
portsarg += string(port)+"\\|"
|
||||||
|
|
||||||
|
}else{
|
||||||
|
portsarg += string(port)+"'"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// how many seconds to wait in between polls
|
// how many seconds to wait in between polls
|
||||||
poll_rate, err := strconv.Atoi(os.Getenv("POLLRATE"))
|
poll_rate, err := strconv.Atoi(os.Getenv("POLLRATE"))
|
||||||
if check_env_fetch_recoverable(err) {
|
if check_env_fetch_recoverable(err) {
|
||||||
@@ -57,7 +78,7 @@ func main() {
|
|||||||
// if the container is running, see if it needs to be stopped
|
// if the container is running, see if it needs to be stopped
|
||||||
if container_state_on {
|
if container_state_on {
|
||||||
// get active clients
|
// get active clients
|
||||||
out, err := exec.Command("/bin/sh", "-c", "netstat -n | grep ESTABLISHED | awk '{ print $4 }' | rev | cut -d: -f1| rev | grep -w \"$PORT\" | wc -l").Output() // todo make this handle multiple ports?
|
out, err := exec.Command("/bin/sh", "-c", "netstat -n | grep ESTABLISHED | awk '{ print $4 }' | rev | cut -d: -f1| rev | grep "+portsarg+" | wc -l").Output() // todo make this handle multiple ports?
|
||||||
check(err)
|
check(err)
|
||||||
active_clients, err := strconv.Atoi(strings.TrimSpace(string(out)))
|
active_clients, err := strconv.Atoi(strings.TrimSpace(string(out)))
|
||||||
check(err)
|
check(err)
|
||||||
|
|||||||
Reference in New Issue
Block a user