Skip to content

Commit

Permalink
fix: add missing portmap when needed (#1183)
Browse files Browse the repository at this point in the history
  • Loading branch information
piksel authored Jan 22, 2022
1 parent a1bdd26 commit 04db93c
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 19 deletions.
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

0 comments on commit 04db93c

Please sign in to comment.