Skip to content

Instantly share code, notes, and snippets.

@elee
Created May 3, 2024 22:46
Show Gist options
  • Save elee/03b4c4a9d4351e26ed9be5c4e69e55a4 to your computer and use it in GitHub Desktop.
Save elee/03b4c4a9d4351e26ed9be5c4e69e55a4 to your computer and use it in GitHub Desktop.
Dagger With Socket Sharing
package main
import (
"bufio"
"context"
"errors"
"fmt"
"io"
"log"
"os"
"path/filepath"
"strings"
"time"
"dagger.io/dagger"
)
func main() {
ctx := context.Background()
client, err := dagger.Connect(ctx, dagger.WithLogOutput(os.Stdout))
if err != nil {
panic(err)
}
defer client.Close()
directory := client.Directory()
// create socket
//socket := client.Host().UnixSocket("/tmp/my_socket")
// create consumer container
consumer := client.Container().From("alpine:latest").
WithExec(strings.Split("apk add netcat-openbsd socat", " ")).
WithDirectory("/tmp", directory).
WithExec(strings.Split("nc -lU /tmp/my_socket", " "))
// create producer container
stdout, err := client.Container().From("alpine:latest").
WithServiceBinding("consumer", consumer.AsService()).
WithDirectory("/tmp", directory).
WithExec(strings.Split("apk add netcat-openbsd socat", " ")).
WithExec(strings.Split(`printf Yee | nc -U /tmp/my_socket`, " ")).
Stdout(ctx)
if err != nil {
panic(err)
}
fmt.Println(stdout)
}
@elee
Copy link
Author

elee commented May 3, 2024

But switching the path to /my_socket and extracting just that File and re-mounting using WithFile hangs

package main

import (
	"bufio"
	"context"
	"errors"
	"fmt"
	"io"
	"log"
	"os"
	"path/filepath"
	"strings"
	"time"

	"dagger.io/dagger"
)

func main() {
	ctx := context.Background()
	client, err := dagger.Connect(ctx, dagger.WithLogOutput(os.Stdout))
	if err != nil {
		panic(err)
	}
	defer client.Close()

	directory := client.Directory()
	// create socket
	//socket := client.Host().UnixSocket("/tmp/my_socket")
	// create consumer container
	consumer := client.Container().From("alpine:latest").
		WithExec(strings.Split("apk add netcat-openbsd socat", " ")).
		WithDirectory("/tmp", directory).
		WithExec(strings.Split("nc -lU /my_socket", " "))

	file := consumer.File("/my_socket")

	// create producer container
	stdout, err := client.Container().From("alpine:latest").
		WithServiceBinding("consumer", consumer.AsService()).
		WithDirectory("/tmp", directory).
		WithFile("/my_socket", file).
		WithExec(strings.Split("apk add netcat-openbsd socat", " ")).
		WithExec(strings.Split(`printf Yee | nc -U /my_socket`, " ")).
		Stdout(ctx)
	if err != nil {
		panic(err)
	}
	fmt.Println(stdout)
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment