44 "context"
55 "errors"
66 "flag"
7+ "fmt"
78 "log/slog"
89 "net/http"
910 "os"
@@ -23,19 +24,48 @@ const (
2324 shutdownTimeout = 10 * time .Second
2425)
2526
27+ func getEnv (key , fallback string ) string {
28+ if value , ok := os .LookupEnv (key ); ok {
29+ return value
30+ }
31+ return fallback
32+ }
33+
2634func main () {
27- policyPath := flag .String ("policy" , "policy.json" , "Path to the authorization policy JSON file" )
28- listenAddr := flag .String ("listen-addr" , ":2375" , "Address to listen on" )
29- socketPath := flag .String ("socket-path" , "/var/run/docker.sock" , "Path to the Docker Unix socket" )
35+ flag .Usage = func () {
36+ fmt .Fprintf (os .Stderr , "Docker Socket Proxy using JSON policy for access control.\n \n " )
37+ fmt .Fprintf (os .Stderr , "Usage:\n " )
38+ fmt .Fprintf (os .Stderr , " docker-socket-proxy [flags]\n \n " )
39+ fmt .Fprintf (os .Stderr , "Configuration can be provided via flags or environment variables.\n " )
40+ fmt .Fprintf (os .Stderr , "Flags take precedence over environment variables.\n \n " )
41+ fmt .Fprintf (os .Stderr , "Flags:\n " )
42+ flag .PrintDefaults ()
43+ fmt .Fprintf (os .Stderr , "\n Environment Variables:\n " )
44+ fmt .Fprintf (os .Stderr , " POLICY Path to the authorization policy JSON file (default: policy.json)\n " )
45+ fmt .Fprintf (os .Stderr , " LISTEN_ADDR Address to listen on (default: :2375)\n " )
46+ fmt .Fprintf (os .Stderr , " DOCKER_SOCKET_PATH Path to the Docker Unix socket (default: /var/run/docker.sock)\n \n " )
47+ fmt .Fprintf (os .Stderr , "Example:\n " )
48+ fmt .Fprintf (os .Stderr , " DOCKER_SOCKET_PATH=/run/docker.sock docker-socket-proxy -listen-addr :2376\n " )
49+ }
50+
51+ policyPath := flag .String ("policy" , getEnv ("POLICY" , "policy.json" ), "Path to the authorization policy JSON file" )
52+ listenAddr := flag .String ("listen-addr" , getEnv ("LISTEN_ADDR" , ":2375" ), "Address to listen on" )
53+ socketPath := flag .String ("socket-path" , getEnv ("DOCKER_SOCKET_PATH" , "/var/run/docker.sock" ), "Path to the Docker Unix socket" )
3054 flag .Parse ()
3155
3256 logger := initLogger ()
3357
3458 logger .Info ("starting docker socket proxy" , "listen" , * listenAddr , "socket" , * socketPath , "policy" , * policyPath )
3559
60+ if _ , err := os .Stat (* policyPath ); os .IsNotExist (err ) {
61+ fmt .Fprintf (os .Stderr , "Error: Policy file not found: %s\n \n " , * policyPath )
62+ flag .Usage ()
63+ os .Exit (1 )
64+ }
65+
3666 pol , err := auth .LoadPolicy (* policyPath )
3767 if err != nil {
38- logger . Error ( "failed to load policy" , "err " , err )
68+ fmt . Fprintf ( os . Stderr , "Error: Failed to load policy: %v \n " , err )
3969 os .Exit (1 )
4070 }
4171
0 commit comments