所以我在一个已经运行了MySQL的主机上运行了几个Docker容器。我还想在同一台机器上的Docker容器中运行MySQL。我将我的Docker合成文件设置为使用3307,但是当我的应用程序尝试获取DB连接时,我看到:
web_1 | Could not connect ... 2003: Can't connect to MySQL server on 'db:3307' (111 Connection refused)
web_1 | 10.0.2.2 - - [04/Mar/2019 21:06:31] "GET / HTTP/1.1" 500 -
我尝试了各种不同的网络配置,但每一种都会产生新的问题。这是我正在使用的合成文件和‘docker-compose.yml file容器ps’的输出
[jim@localhost ~]$ docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a0f12368ee8d jimpython_web "python ./app.py" 4 minutes ago Up 4 minutes 0.0.0.0:5000->5000/tcp jimpython_web_1
9b0efbf08069 jimpython_celery "celery worker -A ..." 4 minutes ago Up 4 minutes jimpython_celery_1
fcc72e5a9fdd mysql:5.7 "docker-entrypoint..." 15 minutes ago Up 4 minutes 33060/tcp, 0.0.0.0:3307->3306/tcp jimpython_db_1
0b65a78a56f2 redis:alpine "docker-entrypoint..." 15 minutes ago Up 4 minutes 0.0.0.0:6379->6379/tcp jimpython_redis_1
3c2d1551c165 mongo "docker-entrypoint..." 15 minutes ago Up 4 minutes 0.0.0.0:27017->27017/tcp jimpython_mongo_1
如果可能的话,我希望不要更改Docker中运行MySQL的端口。任何意见都是值得感谢的。
发布于 2019-03-05 08:42:03
看起来您正在从另一个Docker容器连接到数据库。当你这样做的时候,暴露/转发的端口不会被使用,所以你仍然应该在那里使用3306。只有在从Docker外部连接到3307时才能使用3307。
发布于 2021-10-04 10:48:36
这篇文章:https://dev.to/pmutua/run-mysql-on-port-3307-using-docker-compose-gf8在mysql配置文件上定义端口:
mysqldb:
image: mysql
ports:
- 3307:3307
environment:
- MYSQL_ROOT_PASSWORD=password
- MYSQL_TCP_PORT=3307
volumes:
- mysql:/var/lib/mysql
- mysql_config:/etc/mysql
https://stackoverflow.com/questions/54993731
复制相似问题