Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

break: use a docker image type for modules #2744

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions image.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,21 @@ import (
"context"
)

// DockerImage represents a Docker image as a string.
// Valid examples:
// - "alpine:3.12"
// - "docker.io/nginx:latest"
// - "my-registry.local:5000/my-image:my-tag"
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be sha256:abc... form valid as well? Could you add example to the doc?

type DockerImage string

func NewDockerImage(image string) DockerImage {
return DockerImage(image)
}

func (d DockerImage) String() string {
return string(d)
}

// ImageInfo represents a summary information of an image
type ImageInfo struct {
ID string
Expand Down
4 changes: 2 additions & 2 deletions modules/artemis/artemis.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,10 +85,10 @@ func RunContainer(ctx context.Context, opts ...testcontainers.ContainerCustomize
}

// Run creates an instance of the Artemis container type with a given image
func Run(ctx context.Context, img string, opts ...testcontainers.ContainerCustomizer) (*Container, error) {
func Run(ctx context.Context, img testcontainers.DockerImage, opts ...testcontainers.ContainerCustomizer) (*Container, error) {
req := testcontainers.GenericContainerRequest{
ContainerRequest: testcontainers.ContainerRequest{
Image: img,
Image: img.String(),
Env: map[string]string{
"ARTEMIS_USER": "artemis",
"ARTEMIS_PASSWORD": "artemis",
Expand Down
4 changes: 2 additions & 2 deletions modules/azurite/azurite.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,9 @@ func RunContainer(ctx context.Context, opts ...testcontainers.ContainerCustomize
}

// Run creates an instance of the Azurite container type
func Run(ctx context.Context, img string, opts ...testcontainers.ContainerCustomizer) (*AzuriteContainer, error) {
func Run(ctx context.Context, img testcontainers.DockerImage, opts ...testcontainers.ContainerCustomizer) (*AzuriteContainer, error) {
req := testcontainers.ContainerRequest{
Image: img,
Image: img.String(),
ExposedPorts: []string{BlobPort, QueuePort, TablePort},
Env: map[string]string{},
Entrypoint: []string{"azurite"},
Expand Down
4 changes: 2 additions & 2 deletions modules/cassandra/cassandra.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,9 @@ func RunContainer(ctx context.Context, opts ...testcontainers.ContainerCustomize
}

// Run creates an instance of the Cassandra container type
func Run(ctx context.Context, img string, opts ...testcontainers.ContainerCustomizer) (*CassandraContainer, error) {
func Run(ctx context.Context, img testcontainers.DockerImage, opts ...testcontainers.ContainerCustomizer) (*CassandraContainer, error) {
req := testcontainers.ContainerRequest{
Image: img,
Image: img.String(),
ExposedPorts: []string{string(port)},
Env: map[string]string{
"CASSANDRA_SNITCH": "GossipingPropertyFileSnitch",
Expand Down
4 changes: 2 additions & 2 deletions modules/chroma/chroma.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ func RunContainer(ctx context.Context, opts ...testcontainers.ContainerCustomize
}

// Run creates an instance of the Chroma container type
func Run(ctx context.Context, img string, opts ...testcontainers.ContainerCustomizer) (*ChromaContainer, error) {
func Run(ctx context.Context, img testcontainers.DockerImage, opts ...testcontainers.ContainerCustomizer) (*ChromaContainer, error) {
req := testcontainers.ContainerRequest{
Image: img,
Image: img.String(),
ExposedPorts: []string{"8000/tcp"},
WaitingFor: wait.ForAll(
wait.ForListeningPort("8000/tcp"),
Expand Down
4 changes: 2 additions & 2 deletions modules/clickhouse/clickhouse.go
Original file line number Diff line number Diff line change
Expand Up @@ -221,9 +221,9 @@ func RunContainer(ctx context.Context, opts ...testcontainers.ContainerCustomize
}

// Run creates an instance of the ClickHouse container type
func Run(ctx context.Context, img string, opts ...testcontainers.ContainerCustomizer) (*ClickHouseContainer, error) {
func Run(ctx context.Context, img testcontainers.DockerImage, opts ...testcontainers.ContainerCustomizer) (*ClickHouseContainer, error) {
req := testcontainers.ContainerRequest{
Image: img,
Image: img.String(),
Env: map[string]string{
"CLICKHOUSE_USER": defaultUser,
"CLICKHOUSE_PASSWORD": defaultUser,
Expand Down
4 changes: 2 additions & 2 deletions modules/cockroachdb/cockroachdb.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,11 +74,11 @@ func RunContainer(ctx context.Context, opts ...testcontainers.ContainerCustomize
}

// Run creates an instance of the CockroachDB container type
func Run(ctx context.Context, img string, opts ...testcontainers.ContainerCustomizer) (*CockroachDBContainer, error) {
func Run(ctx context.Context, img testcontainers.DockerImage, opts ...testcontainers.ContainerCustomizer) (*CockroachDBContainer, error) {
o := defaultOptions()
req := testcontainers.GenericContainerRequest{
ContainerRequest: testcontainers.ContainerRequest{
Image: img,
Image: img.String(),
ExposedPorts: []string{
defaultSQLPort,
defaultAdminPort,
Expand Down
4 changes: 2 additions & 2 deletions modules/consul/consul.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,10 @@ func RunContainer(ctx context.Context, opts ...testcontainers.ContainerCustomize
}

// Run creates an instance of the Consul container type
func Run(ctx context.Context, img string, opts ...testcontainers.ContainerCustomizer) (*ConsulContainer, error) {
func Run(ctx context.Context, img testcontainers.DockerImage, opts ...testcontainers.ContainerCustomizer) (*ConsulContainer, error) {
containerReq := testcontainers.GenericContainerRequest{
ContainerRequest: testcontainers.ContainerRequest{
Image: img,
Image: img.String(),
ExposedPorts: []string{
defaultHttpApiPort + "/tcp",
defaultBrokerPort + "/tcp",
Expand Down
4 changes: 2 additions & 2 deletions modules/couchbase/couchbase.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ func RunContainer(ctx context.Context, opts ...testcontainers.ContainerCustomize
}

// Run creates an instance of the Couchbase container type
func Run(ctx context.Context, img string, opts ...testcontainers.ContainerCustomizer) (*CouchbaseContainer, error) {
func Run(ctx context.Context, img testcontainers.DockerImage, opts ...testcontainers.ContainerCustomizer) (*CouchbaseContainer, error) {
config := &Config{
enabledServices: make([]Service, 0),
username: "Administrator",
Expand All @@ -72,7 +72,7 @@ func Run(ctx context.Context, img string, opts ...testcontainers.ContainerCustom
}

req := testcontainers.ContainerRequest{
Image: img,
Image: img.String(),
ExposedPorts: []string{MGMT_PORT + "/tcp", MGMT_SSL_PORT + "/tcp"},
}

Expand Down
4 changes: 2 additions & 2 deletions modules/couchbase/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ type Config struct {
password string
isEnterprise bool
buckets []bucket
imageName string
imageName testcontainers.DockerImage
indexStorageMode indexStorageMode
}

Expand Down Expand Up @@ -90,7 +90,7 @@ func WithBuckets(bucket ...bucket) bucketCustomizer {
// Deprecated: Use testcontainers.WithImage instead.
func WithImageName(imageName string) Option {
return func(c *Config) {
c.imageName = imageName
c.imageName = testcontainers.NewDockerImage(imageName)
}
}

Expand Down
4 changes: 2 additions & 2 deletions modules/dolt/dolt.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,9 @@ func RunContainer(ctx context.Context, opts ...testcontainers.ContainerCustomize
}

// Run creates an instance of the Dolt container type
func Run(ctx context.Context, img string, opts ...testcontainers.ContainerCustomizer) (*DoltContainer, error) {
func Run(ctx context.Context, img testcontainers.DockerImage, opts ...testcontainers.ContainerCustomizer) (*DoltContainer, error) {
req := testcontainers.ContainerRequest{
Image: img,
Image: img.String(),
ExposedPorts: []string{"3306/tcp", "33060/tcp"},
Env: map[string]string{
"DOLT_USER": defaultUser,
Expand Down
8 changes: 4 additions & 4 deletions modules/elasticsearch/elasticsearch.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ const (

const (
// Deprecated: it will be removed in the next major version
DefaultBaseImage = "docker.elastic.co/elasticsearch/elasticsearch"
DefaultBaseImage testcontainers.DockerImage = "docker.elastic.co/elasticsearch/elasticsearch"
// Deprecated: it will be removed in the next major version
DefaultBaseImageOSS = "docker.elastic.co/elasticsearch/elasticsearch-oss"
DefaultBaseImageOSS testcontainers.DockerImage = "docker.elastic.co/elasticsearch/elasticsearch-oss"
)

// ElasticsearchContainer represents the Elasticsearch container type used in the module
Expand All @@ -38,10 +38,10 @@ func RunContainer(ctx context.Context, opts ...testcontainers.ContainerCustomize
}

// Run creates an instance of the Elasticsearch container type
func Run(ctx context.Context, img string, opts ...testcontainers.ContainerCustomizer) (*ElasticsearchContainer, error) {
func Run(ctx context.Context, img testcontainers.DockerImage, opts ...testcontainers.ContainerCustomizer) (*ElasticsearchContainer, error) {
req := testcontainers.GenericContainerRequest{
ContainerRequest: testcontainers.ContainerRequest{
Image: img,
Image: img.String(),
Env: map[string]string{
"discovery.type": "single-node",
"cluster.routing.allocation.disk.threshold_enabled": "false",
Expand Down
2 changes: 1 addition & 1 deletion modules/elasticsearch/elasticsearch_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ func TestElasticsearch(t *testing.T) {

tests := []struct {
name string
image string
image testcontainers.DockerImage
passwordCustomiser testcontainers.ContainerCustomizer
}{
{
Expand Down
2 changes: 1 addition & 1 deletion modules/elasticsearch/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (

// isOSS returns true if the base image (without tag) is an OSS image
func isOSS(image string) bool {
return strings.HasPrefix(image, DefaultBaseImageOSS)
return strings.HasPrefix(image, DefaultBaseImageOSS.String())
}

// isAtLeastVersion returns true if the base image (without tag) is in a version or above
Expand Down
4 changes: 2 additions & 2 deletions modules/gcloud/bigquery.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ func RunBigQueryContainer(ctx context.Context, opts ...testcontainers.ContainerC

// RunBigQuery creates an instance of the GCloud container type for BigQuery.
// The URI will always use http:// as the protocol.
func RunBigQuery(ctx context.Context, img string, opts ...testcontainers.ContainerCustomizer) (*GCloudContainer, error) {
func RunBigQuery(ctx context.Context, img testcontainers.DockerImage, opts ...testcontainers.ContainerCustomizer) (*GCloudContainer, error) {
req := testcontainers.GenericContainerRequest{
ContainerRequest: testcontainers.ContainerRequest{
Image: img,
Image: img.String(),
ExposedPorts: []string{"9050/tcp", "9060/tcp"},
WaitingFor: wait.ForHTTP("/discovery/v1/apis/bigquery/v2/rest").WithPort("9050/tcp").WithStartupTimeout(time.Second * 5),
},
Expand Down
4 changes: 2 additions & 2 deletions modules/gcloud/bigtable.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ func RunBigTableContainer(ctx context.Context, opts ...testcontainers.ContainerC
}

// RunBigTable creates an instance of the GCloud container type for BigTable.
func RunBigTable(ctx context.Context, img string, opts ...testcontainers.ContainerCustomizer) (*GCloudContainer, error) {
func RunBigTable(ctx context.Context, img testcontainers.DockerImage, opts ...testcontainers.ContainerCustomizer) (*GCloudContainer, error) {
req := testcontainers.GenericContainerRequest{
ContainerRequest: testcontainers.ContainerRequest{
Image: img,
Image: img.String(),
ExposedPorts: []string{"9000/tcp"},
WaitingFor: wait.ForLog("running"),
},
Expand Down
4 changes: 2 additions & 2 deletions modules/gcloud/datastore.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ func RunDatastoreContainer(ctx context.Context, opts ...testcontainers.Container
}

// RunDatastore creates an instance of the GCloud container type for Datastore.
func RunDatastore(ctx context.Context, img string, opts ...testcontainers.ContainerCustomizer) (*GCloudContainer, error) {
func RunDatastore(ctx context.Context, img testcontainers.DockerImage, opts ...testcontainers.ContainerCustomizer) (*GCloudContainer, error) {
req := testcontainers.GenericContainerRequest{
ContainerRequest: testcontainers.ContainerRequest{
Image: img,
Image: img.String(),
ExposedPorts: []string{"8081/tcp"},
WaitingFor: wait.ForHTTP("/").WithPort("8081/tcp"),
},
Expand Down
4 changes: 2 additions & 2 deletions modules/gcloud/firestore.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ func RunFirestoreContainer(ctx context.Context, opts ...testcontainers.Container
}

// RunFirestore creates an instance of the GCloud container type for Firestore.
func RunFirestore(ctx context.Context, img string, opts ...testcontainers.ContainerCustomizer) (*GCloudContainer, error) {
func RunFirestore(ctx context.Context, img testcontainers.DockerImage, opts ...testcontainers.ContainerCustomizer) (*GCloudContainer, error) {
req := testcontainers.GenericContainerRequest{
ContainerRequest: testcontainers.ContainerRequest{
Image: img,
Image: img.String(),
ExposedPorts: []string{"8080/tcp"},
WaitingFor: wait.ForLog("running"),
},
Expand Down
4 changes: 2 additions & 2 deletions modules/gcloud/pubsub.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ func RunPubsubContainer(ctx context.Context, opts ...testcontainers.ContainerCus
}

// RunPubsub creates an instance of the GCloud container type for Pubsub.
func RunPubsub(ctx context.Context, img string, opts ...testcontainers.ContainerCustomizer) (*GCloudContainer, error) {
func RunPubsub(ctx context.Context, img testcontainers.DockerImage, opts ...testcontainers.ContainerCustomizer) (*GCloudContainer, error) {
req := testcontainers.GenericContainerRequest{
ContainerRequest: testcontainers.ContainerRequest{
Image: img,
Image: img.String(),
ExposedPorts: []string{"8085/tcp"},
WaitingFor: wait.ForLog("started"),
},
Expand Down
4 changes: 2 additions & 2 deletions modules/gcloud/spanner.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ func RunSpannerContainer(ctx context.Context, opts ...testcontainers.ContainerCu
}

// RunSpanner creates an instance of the GCloud container type for Spanner.
func RunSpanner(ctx context.Context, img string, opts ...testcontainers.ContainerCustomizer) (*GCloudContainer, error) {
func RunSpanner(ctx context.Context, img testcontainers.DockerImage, opts ...testcontainers.ContainerCustomizer) (*GCloudContainer, error) {
req := testcontainers.GenericContainerRequest{
ContainerRequest: testcontainers.ContainerRequest{
Image: img,
Image: img.String(),
ExposedPorts: []string{"9010/tcp"},
WaitingFor: wait.ForLog("Cloud Spanner emulator running"),
},
Expand Down
4 changes: 2 additions & 2 deletions modules/grafana-lgtm/grafana.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ type GrafanaLGTMContainer struct {
}

// Run creates an instance of the Grafana LGTM container type
func Run(ctx context.Context, img string, opts ...testcontainers.ContainerCustomizer) (*GrafanaLGTMContainer, error) {
func Run(ctx context.Context, img testcontainers.DockerImage, opts ...testcontainers.ContainerCustomizer) (*GrafanaLGTMContainer, error) {
req := testcontainers.ContainerRequest{
Image: img,
Image: img.String(),
ExposedPorts: []string{GrafanaPort, LokiPort, TempoPort, OtlpGrpcPort, OtlpHttpPort, PrometheusPort},
WaitingFor: wait.ForLog(".*The OpenTelemetry collector and the Grafana LGTM stack are up and running.*\\s").AsRegexp().WithOccurrence(1),
}
Expand Down
4 changes: 2 additions & 2 deletions modules/inbucket/inbucket.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,9 @@ func RunContainer(ctx context.Context, opts ...testcontainers.ContainerCustomize
}

// Run creates an instance of the Inbucket container type
func Run(ctx context.Context, img string, opts ...testcontainers.ContainerCustomizer) (*InbucketContainer, error) {
func Run(ctx context.Context, img testcontainers.DockerImage, opts ...testcontainers.ContainerCustomizer) (*InbucketContainer, error) {
req := testcontainers.ContainerRequest{
Image: img,
Image: img.String(),
ExposedPorts: []string{"2500/tcp", "9000/tcp", "1100/tcp"},
WaitingFor: wait.ForAll(
wait.ForListeningPort("2500/tcp"),
Expand Down
4 changes: 2 additions & 2 deletions modules/influxdb/influxdb.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ func RunContainer(ctx context.Context, opts ...testcontainers.ContainerCustomize
}

// Run creates an instance of the InfluxDB container type
func Run(ctx context.Context, img string, opts ...testcontainers.ContainerCustomizer) (*InfluxDbContainer, error) {
func Run(ctx context.Context, img testcontainers.DockerImage, opts ...testcontainers.ContainerCustomizer) (*InfluxDbContainer, error) {
req := testcontainers.ContainerRequest{
Image: img,
Image: img.String(),
ExposedPorts: []string{"8086/tcp", "8088/tcp"},
Env: map[string]string{
"INFLUXDB_BIND_ADDRESS": ":8088",
Expand Down
2 changes: 1 addition & 1 deletion modules/influxdb/influxdb_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ func TestWithConfigFile(t *testing.T) {
influxVersion := "1.8.10"

influxDbContainer, err := influxdb.Run(context.Background(),
"influxdb:"+influxVersion,
testcontainers.NewDockerImage("influxdb:"+influxVersion),
influxdb.WithConfigFile(filepath.Join("testdata", "influxdb.conf")),
)
require.NoError(t, err)
Expand Down
4 changes: 2 additions & 2 deletions modules/k3s/k3s.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,14 +54,14 @@ func RunContainer(ctx context.Context, opts ...testcontainers.ContainerCustomize
}

// Run creates an instance of the K3s container type
func Run(ctx context.Context, img string, opts ...testcontainers.ContainerCustomizer) (*K3sContainer, error) {
func Run(ctx context.Context, img testcontainers.DockerImage, opts ...testcontainers.ContainerCustomizer) (*K3sContainer, error) {
host, err := getContainerHost(ctx, opts...)
if err != nil {
return nil, err
}

req := testcontainers.ContainerRequest{
Image: img,
Image: img.String(),
ExposedPorts: []string{
defaultKubeSecurePort,
defaultRancherWebhookPort,
Expand Down
4 changes: 2 additions & 2 deletions modules/k6/k6.go
Original file line number Diff line number Diff line change
Expand Up @@ -167,9 +167,9 @@ func RunContainer(ctx context.Context, opts ...testcontainers.ContainerCustomize
}

// Run creates an instance of the K6 container type
func Run(ctx context.Context, img string, opts ...testcontainers.ContainerCustomizer) (*K6Container, error) {
func Run(ctx context.Context, img testcontainers.DockerImage, opts ...testcontainers.ContainerCustomizer) (*K6Container, error) {
req := testcontainers.ContainerRequest{
Image: img,
Image: img.String(),
Cmd: []string{"run"},
WaitingFor: wait.ForExit(),
}
Expand Down
4 changes: 2 additions & 2 deletions modules/kafka/kafka.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,9 @@ func RunContainer(ctx context.Context, opts ...testcontainers.ContainerCustomize
}

// Run creates an instance of the Kafka container type
func Run(ctx context.Context, img string, opts ...testcontainers.ContainerCustomizer) (*KafkaContainer, error) {
func Run(ctx context.Context, img testcontainers.DockerImage, opts ...testcontainers.ContainerCustomizer) (*KafkaContainer, error) {
req := testcontainers.ContainerRequest{
Image: img,
Image: img.String(),
ExposedPorts: []string{string(publicPort)},
Env: map[string]string{
// envVars {
Expand Down
4 changes: 2 additions & 2 deletions modules/localstack/localstack.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,11 +73,11 @@ func RunContainer(ctx context.Context, opts ...testcontainers.ContainerCustomize

// Run creates an instance of the LocalStack container type
// - overrideReq: a function that can be used to override the default container request, usually used to set the image version, environment variables for localstack, etc.
func Run(ctx context.Context, img string, opts ...testcontainers.ContainerCustomizer) (*LocalStackContainer, error) {
func Run(ctx context.Context, img testcontainers.DockerImage, opts ...testcontainers.ContainerCustomizer) (*LocalStackContainer, error) {
dockerHost := testcontainers.ExtractDockerSocket()

req := testcontainers.ContainerRequest{
Image: img,
Image: img.String(),
WaitingFor: wait.ForHTTP("/_localstack/health").WithPort("4566/tcp").WithStartupTimeout(120 * time.Second),
ExposedPorts: []string{fmt.Sprintf("%d/tcp", defaultPort)},
Env: map[string]string{},
Expand Down
2 changes: 1 addition & 1 deletion modules/localstack/localstack_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ func TestRunContainer(t *testing.T) {

container, err := Run(
ctx,
fmt.Sprintf("localstack/localstack:%s", tt.version),
testcontainers.NewDockerImage(fmt.Sprintf("localstack/localstack:%s", tt.version)),
)

t.Run("Localstack:"+tt.version+" - multiple services exposed on same port", func(t *testing.T) {
Expand Down
4 changes: 2 additions & 2 deletions modules/mariadb/mariadb.go
Original file line number Diff line number Diff line change
Expand Up @@ -126,9 +126,9 @@ func RunContainer(ctx context.Context, opts ...testcontainers.ContainerCustomize
}

// Run creates an instance of the MariaDB container type
func Run(ctx context.Context, img string, opts ...testcontainers.ContainerCustomizer) (*MariaDBContainer, error) {
func Run(ctx context.Context, img testcontainers.DockerImage, opts ...testcontainers.ContainerCustomizer) (*MariaDBContainer, error) {
req := testcontainers.ContainerRequest{
Image: img,
Image: img.String(),
ExposedPorts: []string{"3306/tcp", "33060/tcp"},
Env: map[string]string{
"MARIADB_USER": defaultUser,
Expand Down
Loading
Loading