Skip to content
Merged
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
33 changes: 17 additions & 16 deletions pkg/container/container.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (

"github.com/docker/docker/api/types"
dockercontainer "github.com/docker/docker/api/types/container"
"github.com/docker/go-connections/nat"
)

// NewContainer returns a new Container instance instantiated with the
Expand Down Expand Up @@ -191,24 +192,22 @@ func (c Container) PreUpdateTimeout() int {

// PostUpdateTimeout checks whether a container has a specific timeout set
// for how long the post-update command is allowed to run. This value is expressed
// either as an integer, in minutes, or as 0 which will allow the command/script
// to run indefinitely. Users should be cautious with the 0 option, as that
// could result in watchtower waiting forever.
func (c Container) PostUpdateTimeout() int {
var minutes int
var err error

val := c.getLabelValueOrEmpty(postUpdateTimeoutLabel)

minutes, err = strconv.Atoi(val)
if err != nil || val == "" {
return 1
}
// either as an integer, in minutes, or as 0 which will allow the command/script
// to run indefinitely. Users should be cautious with the 0 option, as that
// could result in watchtower waiting forever.
func (c Container) PostUpdateTimeout() int {
var minutes int
var err error

return minutes
}
val := c.getLabelValueOrEmpty(postUpdateTimeoutLabel)

minutes, err = strconv.Atoi(val)
if err != nil || val == "" {
return 1
}

return minutes
}

// StopSignal returns the custom stop signal (if any) that is encoded in the
// container's metadata. If the container has not specified a custom stop
Expand Down Expand Up @@ -319,8 +318,10 @@ func (c Container) VerifyConfiguration() error {
return errorInvalidConfig
}

// Instead of returning an error here, we just create an empty map
// This should allow for updating containers where the exposed ports are missing
if len(hostConfig.PortBindings) > 0 && containerConfig.ExposedPorts == nil {
return errorNoExposedPorts
containerConfig.ExposedPorts = make(map[nat.Port]struct{})
}

return nil
Expand Down
8 changes: 5 additions & 3 deletions pkg/container/container_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,13 @@ var _ = Describe("the container", func() {
})
})
When("verifying a container with port bindings, but no exposed ports", func() {
It("should return an error", func() {
It("should make the config compatible with updating", func() {
c := mockContainerWithPortBindings("80/tcp")
c.containerInfo.Config.ExposedPorts = nil
err := c.VerifyConfiguration()
Expect(err).To(Equal(errorNoExposedPorts))
Expect(c.VerifyConfiguration()).To(Succeed())

Expect(c.containerInfo.Config.ExposedPorts).ToNot(BeNil())
Expect(c.containerInfo.Config.ExposedPorts).To(BeEmpty())
})
})
When("verifying a container with port bindings and exposed ports is non-nil", func() {
Expand Down