diff --git a/pkg/specgen/generate/ports.go b/pkg/specgen/generate/ports.go
index 1ad7e6f4de..7dd50ac0d1 100644
--- a/pkg/specgen/generate/ports.go
+++ b/pkg/specgen/generate/ports.go
@@ -123,19 +123,20 @@ func parsePortMapping(portMappings []specgen.PortMapping) ([]ocicni.PortMapping,
 						postAssignHostPort = true
 					}
 				} else {
-					testCPort := ctrPortMap[cPort]
-					if testCPort != 0 && testCPort != hPort {
-						// This is an attempt to redefine a port
-						return nil, nil, nil, errors.Errorf("conflicting port mappings for container port %d (protocol %s)", cPort, p)
-					}
-					ctrPortMap[cPort] = hPort
-
 					testHPort := hostPortMap[hPort]
 					if testHPort != 0 && testHPort != cPort {
 						return nil, nil, nil, errors.Errorf("conflicting port mappings for host port %d (protocol %s)", hPort, p)
 					}
 					hostPortMap[hPort] = cPort
 
+					// Mapping a container port to multiple
+					// host ports is allowed.
+					// We only store the latest of these in
+					// the container port map - we don't
+					// need to know all of them, just one.
+					testCPort := ctrPortMap[cPort]
+					ctrPortMap[cPort] = hPort
+
 					// If we have an exact duplicate, just continue
 					if testCPort == hPort && testHPort == cPort {
 						continue
diff --git a/test/e2e/run_networking_test.go b/test/e2e/run_networking_test.go
index bf96db1977..87b74052af 100644
--- a/test/e2e/run_networking_test.go
+++ b/test/e2e/run_networking_test.go
@@ -220,6 +220,22 @@ var _ = Describe("Podman run networking", func() {
 		Expect(inspectOut[0].NetworkSettings.Ports["8080/tcp"][0].HostIP).To(Equal(""))
 	})
 
+	It("podman run -p 8080:8080 -p 8081:8080", func() {
+		name := "testctr"
+		session := podmanTest.Podman([]string{"create", "-t", "-p", "4000:8080", "-p", "8000:8080", "--name", name, ALPINE, "/bin/sh"})
+		session.WaitWithDefaultTimeout()
+		inspectOut := podmanTest.InspectContainer(name)
+		Expect(len(inspectOut)).To(Equal(1))
+		Expect(len(inspectOut[0].NetworkSettings.Ports)).To(Equal(1))
+		Expect(len(inspectOut[0].NetworkSettings.Ports["8080/tcp"])).To(Equal(2))
+
+		hp1 := inspectOut[0].NetworkSettings.Ports["8080/tcp"][0].HostPort
+		hp2 := inspectOut[0].NetworkSettings.Ports["8080/tcp"][1].HostPort
+
+		// We can't guarantee order
+		Expect((hp1 == "4000" && hp2 == "8000") || (hp1 == "8000" && hp2 == "4000")).To(BeTrue())
+	})
+
 	It("podman run network expose host port 80 to container port 8000", func() {
 		SkipIfRootless()
 		session := podmanTest.Podman([]string{"run", "-dt", "-p", "80:8000", ALPINE, "/bin/sh"})