package docker import ( "fmt" "github.com/pulumi/pulumi-docker/sdk/v3/go/docker" "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) // DockerContainerInput is the configuration // used to create the Gitea docker container. type DockerContainerInput struct { Image pulumi.StringInput Ipv4Address pulumi.StringInput EnvVars pulumi.StringArray Name pulumi.StringInput Network pulumi.StringInput HostPathVolumes []HostPathVolume DockerVolumes []DockerVolume UniqueLabel string } // HostPathVolume is the configuration // used for mounting a host directory // to a directory inside a container. type HostPathVolume struct { HostPath pulumi.StringInput MountPath pulumi.StringInput } // DockerVolume is the configuration // used for mounting a docker volume // to a directory inside a container. type DockerVolume struct { Name pulumi.StringInput MountPath pulumi.StringInput } // CreateContainer creates and runs a new container. func CreateContainer(ctx *pulumi.Context, c DockerContainerInput) error { // all containers will mount the host's timezone and localtime files // to ensure the correct time is synced. volumes := []docker.ContainerVolumeInput{ docker.ContainerVolumeArgs{ ContainerPath: pulumi.String("/etc/timezone"), HostPath: pulumi.String("/etc/timezone"), ReadOnly: pulumi.BoolPtr(true), }, docker.ContainerVolumeArgs{ ContainerPath: pulumi.String("/etc/localtime"), HostPath: pulumi.String("/etc/localtime"), ReadOnly: pulumi.BoolPtr(true), }, } // create additional container volumes if specified. for _, v := range c.HostPathVolumes { arg := docker.ContainerVolumeArgs{ ContainerPath: v.MountPath, HostPath: v.HostPath, } volumes = append(volumes, arg) } for _, v := range c.DockerVolumes { arg := docker.ContainerVolumeArgs{ ContainerPath: v.MountPath, VolumeName: v.Name, } volumes = append(volumes, arg) } args := docker.ContainerArgs{ Envs: c.EnvVars, Image: c.Image, Hostname: c.Name, Name: c.Name, NetworksAdvanced: docker.ContainerNetworksAdvancedArray{ docker.ContainerNetworksAdvancedArgs{ Name: c.Network, Ipv4Address: c.Ipv4Address, }, }, Restart: pulumi.String("unless-stopped"), Volumes: docker.ContainerVolumeArray(volumes), } _, err := docker.NewContainer(ctx, fmt.Sprintf("%s_container", c.UniqueLabel), &args) if err != nil { return fmt.Errorf("unable to create the Docker container for %s...\n%w", c.UniqueLabel, err) } return nil }