docker 运行 命令时如何进行端口映射?

How to make port mapping while docker run command?

我有 2 种不同的服务,如 paymentorder。我希望他们使用不同的数据库。

首先,我通过 运行ning 以下命令提取和 运行 mysql 订单服务的数据库映像;

docker run --name mysql-order -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 -e MYSQL_ROOT_HOST=% -e MYSQL_DATABASE=orderdb --platform=linux/x86_64 -d mysql --lower_case_table_names=1 --init-connect='GRANT CREATE USER ON *.* TO 'root'@'%';FLUSH PRIVILEGES;'

它工作正常,我可以通过 spring boot app order-service 连接到它。

然后我想用相同的命令创建另一个数据库容器,但这次通过 运行ning 更改名称和端口:

docker run --name mysql-payment -p 3407:3407 -e MYSQL_ROOT_PASSWORD=1234 -e MYSQL_DATABASE=paymentdb --platform=linux/x86_64 -d mysql --lower_case_table_names=1 --init-connect='GRANT CREATE USER ON *.* TO 'root'@'%';FLUSH PRIVILEGES;'

在 docker 仪表板标签上 运行ning 在端口 3407 上

但是当我进入支付容器的日志时,它再次显示 3306。

当我使用 docker ps 命令检查端口时,结果是:

CONTAINER ID   IMAGE     COMMAND                  CREATED             STATUS             PORTS                                         NAMES
a113f66398c4   mysql     "docker-entrypoint.s…"   8 minutes ago       Up 8 minutes       3306/tcp, 33060/tcp, 0.0.0.0:3407->3407/tcp   mysql-payment
4b887a1d38d2   mysql     "docker-entrypoint.s…"   About an hour ago   Up About an hour   0.0.0.0:3306->3306/tcp, 33060/tcp             mysql-order

他们正在工作,但我无法连接到支付数据库,而且端口很奇怪,如您在上面所见。

我错过了什么?即使我指定了不同的端口号,这个 3306 从哪里来支付服务?或者也许我可以这样问:我不能在同一台机器上 运行 2 个不同的 mysql 容器,就像我有完全 2 个不同的数据库一样吗?

因为该服务不监听端口 3407,而是监听容器内的端口 3306。所以端口映射应该是3407:3306.

类似

docker run --name mysql-payment -p 3407:3306 ....