docker 运行 命令时如何进行端口映射?
How to make port mapping while docker run command?
我有 2 种不同的服务,如 payment 和 order。我希望他们使用不同的数据库。
首先,我通过 运行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 ....
我有 2 种不同的服务,如 payment 和 order。我希望他们使用不同的数据库。
首先,我通过 运行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 ....