gpt4 book ai didi

mysql - Docker-Compose 无法连接到任何指定的 MySQL 主机

转载 作者:行者123 更新时间:2023-11-29 15:39:14 25 4
gpt4 key购买 nike

我有一个现有的项目(API - 门户 - Mysql)我使用了没有 dockerfile 的 Docker-compose我发布 API - Portal 并将它们全部放入文件夹中,然后 Docker-compose up

我可以通过获取其中的本地值来访问 api但如果我尝试使用 postman 通过 API 访问 mysql,即使我打开前端网站,它也不起作用

ConnectionString:

"ConnectionString": "server=xmysql;port=4406;Database=sbs_hani;User ID=hani;Password=123456; persistsecurityinfo=True;Charset=utf8; TreatTinyAsBoolean=false;"

这是我的 docker-compose 文件:

version: '3'

services:

xmysql:
container_name: xmysql
hostname: xmysql
image: mysql:latest
restart: always
environment:
MYSQL_ROOT_PASSWORD: "123456"
MYSQL_DATABASE: "sbs_hani"
MYSQL_USER: "hani"
MYSQL_PASSWORD: "123456"
ports:
- "3306:4406"
networks:
- xnetwork
volumes:
- data-volume:/var/lib/mysql
- ./hanimysql/sbs_hani.sql:/docker-entrypoint-initdb.d/sbs_hani.sql

xapi:
container_name: xapi
hostname: xapi
image: microsoft/dotnet:latest
# restart: always
tty: true
command: ["dotnet", "/var/lib/volhaniapi/hani.APIs.dll"]
ports:
- "8081:80"
- "8444:443"
networks:
- xnetwork
links:
- xmysql:xmysql
depends_on:
- xmysql
volumes:
- ./haniapi/:/var/lib/volhaniapi/


xportal:
container_name: xportal
hostname: xportal
image: microsoft/dotnet:latest
# restart: always
tty: true
command: ["dotnet", "/var/lib/volhaniportal/hani.Portal.dll"]
ports:
- "8083:80"
- "8446:443"
networks:
- xnetwork
links:
- xmysql:xmysql
depends_on:
- xmysql
volumes:
- ./haniportal/:/var/lib/volhaniportal/

xfront:
container_name: xfront
hostname: xfront
image: nginx:stable-alpine
# restart: always
ports:
- "8082:80"
- "4445:443"
networks:
- xnetwork
links:
- xapi:xapi
depends_on:
- xapi
volumes:
- ./hanifront/:/usr/share/nginx/html


volumes:
data-volume: {}
# xvolmysql:
# driver: "local"
# xvolmongo:
# driver: "local"
# xvolrabbitmq:
# driver: "local"
# xvolstarapi:
# driver: "local"

networks:
xnetwork:
driver: bridge

最佳答案

当您从一个 Docker 容器建立到另一个 Docker 容器的连接时,您始终连接到容器内的服务实际监听的端口。任何 ports: 映射都会被忽略(事实上,如果您不希望从 Docker 容器空间外部访问该服务,则不需要 ports:)。

在您的示例中,您需要将连接字符串中的端口号更改为默认的 MySQL 端口 3306。

(考虑删除所有 container_name:hostname:networks:links: block 您应该有一个具有相同功能的等效容器堆栈;两个最明显的区别是,如果您直接使用 docker 命令,则容器名称将以目录名称为前缀,并且Docker 内部网络将被命名为 default。您仍然可以使用 xmysql 等服务 block 名称作为主机名。)

关于mysql - Docker-Compose 无法连接到任何指定的 MySQL 主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57851823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com