更改端口号时无法连接到mysql服务器

更改端口号时无法连接到mysql服务器,mysql,docker,docker-compose,Mysql,Docker,Docker Compose,我试图将MYSQL容器更改为在docker compose文件中的不同端口号ie3307上运行,但在使用docker compose up启动服务后,出现了如下所示的数据库连接错误可能是什么问题 web_1 | Traceback (most recent call last): web_1 | File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/base.py&q

我试图将MYSQL容器更改为在docker compose文件中的不同端口号ie3307上运行,但在使用
docker compose up启动服务后,出现了如下所示的数据库连接错误
可能是什么问题

web_1         | Traceback (most recent call last):
web_1         |   File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection
web_1         |     self.connect()
web_1         |   File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/base.py", line 194, in connect
web_1         |     self.connection = self.get_new_connection(conn_params)
web_1         |   File "/usr/local/lib/python3.7/site-packages/django/db/backends/mysql/base.py", line 227, in get_new_connection
web_1         |     return Database.connect(**conn_params)
web_1         |   File "/usr/local/lib/python3.7/site-packages/MySQLdb/__init__.py", line 130, in Connect
web_1         |     return Connection(*args, **kwargs)
web_1         |   File "/usr/local/lib/python3.7/site-packages/MySQLdb/connections.py", line 185, in __init__
web_1         |     super().__init__(*args, **kwargs2)
web_1         | MySQLdb._exceptions.OperationalError: (2002, "Can't connect to MySQL server on 'db' (115)")
web_1         |
web_1         | The above exception was the direct cause of the following exception:
web_1         |
web_1         | Traceback (most recent call last):
web_1         |   File "/usr/local/lib/python3.7/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
web_1         |     worker.init_process()
web_1         |   File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/base.py", line 129, in init_process
web_1         |     self.load_wsgi()
web_1         |   File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/base.py", line 138, in load_wsgi
web_1         |     self.wsgi = self.app.wsgi()
web_1         |   File "/usr/local/lib/python3.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
web_1         |     self.callable = self.load()
web_1         |   File "/usr/local/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load
web_1         |     return self.load_wsgiapp()
web_1         |   File "/usr/local/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp
web_1         |     return util.import_app(self.app_uri)
web_1         |   File "/usr/local/lib/python3.7/site-packages/gunicorn/util.py", line 350, in import_app
web_1         |     __import__(module)
web_1         |   File "/src/core/wsgi.py", line 16, in <module>
web_1         |     application = get_wsgi_application()
web_1         |   File "/usr/local/lib/python3.7/site-packages/django/core/wsgi.py", line 12, in get_wsgi_application
web_1         |     django.setup(set_prefix=False)
web_1         |   File "/usr/local/lib/python3.7/site-packages/django/__init__.py", line 24, in setup
web_1         |     apps.populate(settings.INSTALLED_APPS)
web_1         |   File "/usr/local/lib/python3.7/site-packages/django/apps/registry.py", line 120, in populate
web_1         |     app_config.ready()
web_1         |   File "/usr/local/lib/python3.7/site-packages/django_prometheus/apps.py", line 23, in ready
web_1         |     ExportMigrations()
web_1         |   File "/usr/local/lib/python3.7/site-packages/django_prometheus/migrations.py", line 49, in ExportMigrations
web_1         |     executor = MigrationExecutor(connections[alias])
web_1         |   File "/usr/local/lib/python3.7/site-packages/django/db/migrations/executor.py", line 18, in __init__
web_1         |     self.loader = MigrationLoader(self.connection)
web_1         |   File "/usr/local/lib/python3.7/site-packages/django/db/migrations/loader.py", line 49, in __init__
web_1         |     self.build_graph()
web_1         |   File "/usr/local/lib/python3.7/site-packages/django/db/migrations/loader.py", line 212, in build_graph
web_1         |     self.applied_migrations = recorder.applied_migrations()
web_1         |   File "/usr/local/lib/python3.7/site-packages/django/db/migrations/recorder.py", line 61, in applied_migrations
web_1         |     if self.has_table():
web_1         |   File "/usr/local/lib/python3.7/site-packages/django/db/migrations/recorder.py", line 44, in has_table
web_1         |     return self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor())
web_1         |   File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/base.py", line 255, in cursor
web_1         |     return self._cursor()
web_1         |   File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/base.py", line 232, in _cursor
web_1         |     self.ensure_connection()
web_1         |   File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection
web_1         |     self.connect()
web_1         |   File "/usr/local/lib/python3.7/site-packages/django/db/utils.py", line 89, in __exit__
web_1         |     raise dj_exc_value.with_traceback(traceback) from exc_value
web_1         |   File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection
web_1         |     self.connect()
web_1         |   File "/usr/local/lib/python3.7/site-packages/django/db/backends/base/base.py", line 194, in connect
web_1         |     self.connection = self.get_new_connection(conn_params)
web_1         |   File "/usr/local/lib/python3.7/site-packages/django/db/backends/mysql/base.py", line 227, in get_new_connection
web_1         |     return Database.connect(**conn_params)
web_1         |   File "/usr/local/lib/python3.7/site-packages/MySQLdb/__init__.py", line 130, in Connect
web_1         |     return Connection(*args, **kwargs)
web_1         |   File "/usr/local/lib/python3.7/site-packages/MySQLdb/connections.py", line 185, in __init__
web_1         |     super().__init__(*args, **kwargs2)
web_1         | django.db.utils.OperationalError: (2002, "Can't connect to MySQL server on 'db' (115)")
应用程序数据库设置 运行
docker ps后

您还需要告诉MySQL计划的变更:

environment:
  MYSQL_TCP_PORT: 3307 
(由于@derpirscher,已修复,见下文)


(我之前猜测它将是
端口
数据库端口
MYSQL端口
MYSQLD端口
,或者,为了证明我愿意相信我在Github上发现的任何荒谬,
MYSQL\u主机=DB:3307

),你还需要告诉MYSQL计划的变更:

environment:
  MYSQL_TCP_PORT: 3307 
(由于@derpirscher,已修复,见下文)


(我之前猜测它将是
端口
数据库端口
MYSQL端口
MYSQLD端口
,或者,为了证明我愿意相信在Github上发现的任何荒谬,
MYSQL\u主机=DB:3307

容器之间的连接总是使用“正常”端口号进行服务;这些连接忽略了
端口:
可能进行的任何重新映射。如果您只是从另一个容器连接到数据库,实际上,
端口:
根本不是必需的;如果存在,第二个端口号也需要是服务的“正常”端口号

更改
docker compose.yml
文件应该有用:

版本:“3.8”
服务:
db:
#不需要暴露:`
端口:#可选,如果您不打算从外部Docker连接
-“3307:3306”#第二个端口u必须为“正常”端口3306
phpmyadmin:
#不需要`容器名称:`或`链接:`
环境:
PMA#U主机:db#合成服务名称
PMA_端口:3306#始终为“正常”端口,忽略`端口:`
同样,在您的配置中:

“主机”:“数据库”,
“端口”:“3306”,即“正常”端口,忽略“端口:`

正如我在评论中指出的,
expose:
links:
仅与过时的Docker网络模式相关,并且可以从
Docker compose.yml
文件中安全删除。通常,让Compose选择自己的
容器\u name:

容器之间的连接始终使用“正常”端口号进行服务,也没有什么害处;这些连接忽略了
端口:
可能进行的任何重新映射。如果您只是从另一个容器连接到数据库,实际上,
端口:
根本不是必需的;如果存在,第二个端口号也需要是服务的“正常”端口号

更改
docker compose.yml
文件应该有用:

版本:“3.8”
服务:
db:
#不需要暴露:`
端口:#可选,如果您不打算从外部Docker连接
-“3307:3306”#第二个端口u必须为“正常”端口3306
phpmyadmin:
#不需要`容器名称:`或`链接:`
环境:
PMA#U主机:db#合成服务名称
PMA_端口:3306#始终为“正常”端口,忽略`端口:`
同样,在您的配置中:

“主机”:“数据库”,
“端口”:“3306”,即“正常”端口,忽略“端口:`

正如我在评论中指出的,
expose:
links:
仅与过时的Docker网络模式相关,并且可以从
Docker compose.yml
文件中安全删除。通常情况下,让Compose选择自己的
容器\u name:

也没有什么害处。您是否也更改了映像中mysql服务器的端口?目前,您正在从容器中公开端口3307,但容器中的mysql实例可能仍在侦听默认端口3306@derpirscher我将在环境下添加的参数的名称是什么,以声明上面docker compose文件中的端口号?您还应该允许该端口通过防火墙。这解决了我面临的一个类似问题。看一下文档应该是
MYSQL\u TCP\u PORT
您是否也更改了图像中MYSQL服务器的端口?目前,您正在从容器中公开端口3307,但容器中的mysql实例可能仍在侦听默认端口3306@derpirscher我将在环境下添加的参数的名称是什么,以声明上面docker compose文件中的端口号?您还应该允许该端口通过防火墙。这解决了我面临的一个类似问题。看一看文档应该是
MYSQL\u-TCP\u-PORT
,根据这个文档,它是MYSQL\u-TCP\u-PORT-Hmmm,还有一个,根据url是
mysqld\u-PORT
,但是根据实际页面是
PORT
。不过,不应该太难尝试@Philip:请注意,配置中设置的任何值都会覆盖环境变量。不太可能设置,但如果tit不起作用,则需要查找一些内容。添加了
MYSQL\u TCP\u PORT:3307
在它起作用的环境下;)根据本文档,它的MYSQL_TCP_端口是Hmmm,但也有,根据url,它是
mysqld_端口
,但根据实际页面,它是
PORT
。不过,不应该太难尝试@Philip:请注意,配置中设置的任何值都会覆盖环境变量。不太可能设置,但如果tit不起作用,则需要查找一些内容。添加了
MYSQL\u TCP\u PORT:3307
在它起作用的环境下;)
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                                         NAMES
2d60c0265ed9        nllb_frontend           "/docker-entrypoint.…"   7 seconds ago       Up 6 seconds        0.0.0.0:80->80/tcp                            frontend
323a7dd77121        nllb_web                "gunicorn --bind 0.0…"   7 seconds ago       Up 2 seconds        7000/tcp                                      nllb_web_1
89ad90d1fb10        phpmyadmin/phpmyadmin   "/docker-entrypoint.…"   7 seconds ago       Up 6 seconds        0.0.0.0:8183->80/tcp                          pma
e5c5e2bda22c        mysql:5.7               "docker-entrypoint.s…"   8 seconds ago       Up 7 seconds        3306/tcp, 33060/tcp, 0.0.0.0:3307->3307/tcp   nllb_db_1
1332ad2e136b        redis:latest            "docker-entrypoint.s…"   9 seconds ago       Up 8 seconds        6379/tcp                                      nllb_redis_1
environment:
  MYSQL_TCP_PORT: 3307