Log Wait strategy¶
The Log wait strategy will check if a string occurs in the container logs for a desired number of times, and allows to set the following conditions:
- the string to be waited for in the container log.
- the number of occurrences of the string to wait for, default is
1(ignored for Submatch). - look for the string using a regular expression, default is
false. - the startup timeout to be used in seconds, default is 60 seconds.
- the poll interval to be used in milliseconds, default is 100 milliseconds.
- the regular expression submatch callback, default nil (occurrences is ignored).
req := ContainerRequest{ Image: "mysql:8.0.36", ExposedPorts: []string{"3306/tcp", "33060/tcp"}, Env: map[string]string{ "MYSQL_ROOT_PASSWORD": "password", "MYSQL_DATABASE": "database", }, WaitingFor: wait.ForLog("port: 3306 MySQL Community Server - GPL"), } Using a regular expression:
req := ContainerRequest{ Image: "mysql:8.0.36", ExposedPorts: []string{"3306/tcp", "33060/tcp"}, Env: map[string]string{ "MYSQL_ROOT_PASSWORD": "password", "MYSQL_DATABASE": "database", }, WaitingFor: wait.ForLog(`.*MySQL Community Server`).AsRegexp(), } Using regular expression with submatch:
var host, port string req := ContainerRequest{ Image: "ollama/ollama:0.5.7", ExposedPorts: []string{"11434/tcp"}, WaitingFor: wait.ForLog(`Listening on (.*:\d+) \(version\s(.*)\)`).Submatch(func(pattern string, submatches [][][]byte) error { var err error for _, matches := range submatches { if len(matches) != 3 { err = fmt.Errorf("`%s` matched %d times, expected %d", pattern, len(matches), 3) continue } host, port, err = net.SplitHostPort(string(matches[1])) if err != nil { return wait.NewPermanentError(fmt.Errorf("split host port: %w", err)) } // Host and port successfully extracted from log. return nil } if err != nil { // Return the last error encountered. return err } return fmt.Errorf("address and version not found: `%s` no matches", pattern) }), } If the return from a Submatch callback function is a wait.PermanentError the wait will stop and the error will be returned. Use wait.NewPermanentError(err error) to achieve this.