Skip to content

Commit dd295f2

Browse files
Merge pull request #8652 from mheon/fix_8650
Correct port range logic for port generation
2 parents 7caef9c + 6b76120 commit dd295f2

File tree

2 files changed

+71
-4
lines changed

2 files changed

+71
-4
lines changed

pkg/specgen/generate/ports.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,11 @@ func parsePortMapping(portMappings []specgen.PortMapping) ([]ocicni.PortMapping,
107107
var index uint16
108108
for index = 0; index < len; index++ {
109109
cPort := containerPort + index
110-
hPort := hostPort + index
110+
hPort := hostPort
111+
// Only increment host port if it's not 0.
112+
if hostPort != 0 {
113+
hPort += index
114+
}
111115

112116
if cPort == 0 {
113117
return nil, nil, nil, errors.Errorf("container port cannot be 0")
@@ -162,8 +166,8 @@ func parsePortMapping(portMappings []specgen.PortMapping) ([]ocicni.PortMapping,
162166
tempMappings,
163167
tempMapping{
164168
mapping: cniPort,
165-
startOfRange: port.Range > 0 && index == 0,
166-
isInRange: port.Range > 0,
169+
startOfRange: port.Range > 1 && index == 0,
170+
isInRange: port.Range > 1,
167171
},
168172
)
169173
}
@@ -183,7 +187,7 @@ func parsePortMapping(portMappings []specgen.PortMapping) ([]ocicni.PortMapping,
183187
for _, tmp := range tempMappings {
184188
p := tmp.mapping
185189

186-
if p.HostPort != 0 && !tmp.isInRange {
190+
if p.HostPort != 0 {
187191
remadeMappings = append(remadeMappings, p)
188192
continue
189193
}

test/e2e/run_networking_test.go

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,69 @@ var _ = Describe("Podman run networking", func() {
9797
Expect(inspectOut[0].NetworkSettings.Ports["80/tcp"][0].HostIP).To(Equal(""))
9898
})
9999

100+
It("podman run -p 80-82 -p 8080:8080", func() {
101+
name := "testctr"
102+
session := podmanTest.Podman([]string{"create", "-t", "-p", "80-82", "-p", "8080:8080", "--name", name, ALPINE, "/bin/sh"})
103+
session.WaitWithDefaultTimeout()
104+
inspectOut := podmanTest.InspectContainer(name)
105+
Expect(len(inspectOut)).To(Equal(1))
106+
Expect(len(inspectOut[0].NetworkSettings.Ports)).To(Equal(4))
107+
Expect(len(inspectOut[0].NetworkSettings.Ports["80/tcp"])).To(Equal(1))
108+
Expect(inspectOut[0].NetworkSettings.Ports["80/tcp"][0].HostPort).To(Not(Equal("80")))
109+
Expect(inspectOut[0].NetworkSettings.Ports["80/tcp"][0].HostIP).To(Equal(""))
110+
Expect(len(inspectOut[0].NetworkSettings.Ports["81/tcp"])).To(Equal(1))
111+
Expect(inspectOut[0].NetworkSettings.Ports["81/tcp"][0].HostPort).To(Not(Equal("81")))
112+
Expect(inspectOut[0].NetworkSettings.Ports["81/tcp"][0].HostIP).To(Equal(""))
113+
Expect(len(inspectOut[0].NetworkSettings.Ports["82/tcp"])).To(Equal(1))
114+
Expect(inspectOut[0].NetworkSettings.Ports["82/tcp"][0].HostPort).To(Not(Equal("82")))
115+
Expect(inspectOut[0].NetworkSettings.Ports["82/tcp"][0].HostIP).To(Equal(""))
116+
Expect(len(inspectOut[0].NetworkSettings.Ports["8080/tcp"])).To(Equal(1))
117+
Expect(inspectOut[0].NetworkSettings.Ports["8080/tcp"][0].HostPort).To(Equal("8080"))
118+
Expect(inspectOut[0].NetworkSettings.Ports["8080/tcp"][0].HostIP).To(Equal(""))
119+
})
120+
121+
It("podman run -p 80-81 -p 8080-8081", func() {
122+
name := "testctr"
123+
session := podmanTest.Podman([]string{"create", "-t", "-p", "80-81", "-p", "8080-8081", "--name", name, ALPINE, "/bin/sh"})
124+
session.WaitWithDefaultTimeout()
125+
inspectOut := podmanTest.InspectContainer(name)
126+
Expect(len(inspectOut)).To(Equal(1))
127+
Expect(len(inspectOut[0].NetworkSettings.Ports)).To(Equal(4))
128+
Expect(len(inspectOut[0].NetworkSettings.Ports["80/tcp"])).To(Equal(1))
129+
Expect(inspectOut[0].NetworkSettings.Ports["80/tcp"][0].HostPort).To(Not(Equal("80")))
130+
Expect(inspectOut[0].NetworkSettings.Ports["80/tcp"][0].HostIP).To(Equal(""))
131+
Expect(len(inspectOut[0].NetworkSettings.Ports["81/tcp"])).To(Equal(1))
132+
Expect(inspectOut[0].NetworkSettings.Ports["81/tcp"][0].HostPort).To(Not(Equal("81")))
133+
Expect(inspectOut[0].NetworkSettings.Ports["81/tcp"][0].HostIP).To(Equal(""))
134+
Expect(len(inspectOut[0].NetworkSettings.Ports["8080/tcp"])).To(Equal(1))
135+
Expect(inspectOut[0].NetworkSettings.Ports["8080/tcp"][0].HostPort).To(Not(Equal("8080")))
136+
Expect(inspectOut[0].NetworkSettings.Ports["8080/tcp"][0].HostIP).To(Equal(""))
137+
Expect(len(inspectOut[0].NetworkSettings.Ports["8081/tcp"])).To(Equal(1))
138+
Expect(inspectOut[0].NetworkSettings.Ports["8081/tcp"][0].HostPort).To(Not(Equal("8081")))
139+
Expect(inspectOut[0].NetworkSettings.Ports["8081/tcp"][0].HostIP).To(Equal(""))
140+
})
141+
142+
It("podman run -p 80 -p 8080-8082:8080-8082", func() {
143+
name := "testctr"
144+
session := podmanTest.Podman([]string{"create", "-t", "-p", "80", "-p", "8080-8082:8080-8082", "--name", name, ALPINE, "/bin/sh"})
145+
session.WaitWithDefaultTimeout()
146+
inspectOut := podmanTest.InspectContainer(name)
147+
Expect(len(inspectOut)).To(Equal(1))
148+
Expect(len(inspectOut[0].NetworkSettings.Ports)).To(Equal(4))
149+
Expect(len(inspectOut[0].NetworkSettings.Ports["80/tcp"])).To(Equal(1))
150+
Expect(inspectOut[0].NetworkSettings.Ports["80/tcp"][0].HostPort).To(Not(Equal("80")))
151+
Expect(inspectOut[0].NetworkSettings.Ports["80/tcp"][0].HostIP).To(Equal(""))
152+
Expect(len(inspectOut[0].NetworkSettings.Ports["8080/tcp"])).To(Equal(1))
153+
Expect(inspectOut[0].NetworkSettings.Ports["8080/tcp"][0].HostPort).To(Equal("8080"))
154+
Expect(inspectOut[0].NetworkSettings.Ports["8080/tcp"][0].HostIP).To(Equal(""))
155+
Expect(len(inspectOut[0].NetworkSettings.Ports["8081/tcp"])).To(Equal(1))
156+
Expect(inspectOut[0].NetworkSettings.Ports["8081/tcp"][0].HostPort).To(Equal("8081"))
157+
Expect(inspectOut[0].NetworkSettings.Ports["8081/tcp"][0].HostIP).To(Equal(""))
158+
Expect(len(inspectOut[0].NetworkSettings.Ports["8082/tcp"])).To(Equal(1))
159+
Expect(inspectOut[0].NetworkSettings.Ports["8082/tcp"][0].HostPort).To(Equal("8082"))
160+
Expect(inspectOut[0].NetworkSettings.Ports["8082/tcp"][0].HostIP).To(Equal(""))
161+
})
162+
100163
It("podman run -p 8080:80", func() {
101164
name := "testctr"
102165
session := podmanTest.Podman([]string{"create", "-t", "-p", "8080:80", "--name", name, ALPINE, "/bin/sh"})

0 commit comments

Comments
 (0)