/// <summary> Starts a container and optionally waits for a readyness log phrase. </summary> /// <param name="options">Options</param> /// <returns>Docker container</returns> public static DockerContainer StartAndWaitForReadynessLogPhrase(DockerContainerOptions options) { if (options == null) { throw new ArgumentNullException(nameof(options)); } if (string.IsNullOrEmpty(options.Name)) { throw new ArgumentException("options.Name must not be null or empty."); } if (options.ImageName == null) { throw new ArgumentNullException("options.ImageName"); } var theDockerArguments = new StringBuilder($"run --detach --name ").Append(options.Name); if (options.Hostname != null) { theDockerArguments.Append($" --hostname {options.Hostname}"); } foreach ((int hostPort, int containerPort) in options.Ports) { theDockerArguments.Append($" --publish {hostPort}:{containerPort}"); } foreach ((string key, string value) in options.EnvironmentVariables) { theDockerArguments.Append($" -e \"{key}={value}\""); } theDockerArguments.Append(' ').Append(options.ImageName); ExecuteDockerCli($"rm --volumes --force {options.Name}"); string theContainerId = ExecuteDockerCli(theDockerArguments.ToString()).Substring(0, 8); var theContainer = new DockerContainer(theContainerId, options); WaitForReadyContainer(theContainer); return(theContainer); }
private DockerContainer(string id, DockerContainerOptions options) { Id = id; StartOptions = options; }