【发布时间】:2017-07-17 23:14:53
【问题描述】:
我正在尝试运行依赖于 mysql 的集成测试(在 python 中)。目前它们依赖于本地运行的 SQL,但我希望它们依赖于在 docker 中运行的 MySQL。
Dockerfile的内容:
FROM continuumio/anaconda3:4.3.1
WORKDIR /opt/workdir
ADD . /opt/workdir
RUN python setup.py install
Docker Compose 的内容:
version: '2'
services:
mysql:
image: mysql:5.6
container_name: test_mysql_container
environment:
- MYSQL_ROOT_PASSWORD=test
- MYSQL_DATABASE=My_Database
- MYSQL_USER=my_user
- MYSQL_PASSWORD=my_password
volumes:
- db_data:/var/lib/mysql
restart: always
expose:
- "3306"
my_common_package:
image: my_common_package
depends_on:
- mysql
restart: always
links:
- mysql
volumes:
db_data:
现在,我尝试使用以下方法在我的包中运行测试:
docker-compose run my_common_package python testsql.py
我收到错误消息
pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on on 'localhost' ([Errno 99] 无法分配请求的地址)")
【问题讨论】:
-
testsql.py 中有什么你认为应该连接到 mysql 的 docker 容器的?
-
您需要使用
mysql主机名进行连接,而不是本地主机名。在网络方面,您可以将容器视为虚拟机, -
在 testsql.py 模块中,我只是有一行使用 python 连接到 'localhost' 端口 '3306' 上的 mysql 实例
-
@andrew 查看下面的答案
-
@andrew 如果您在查看我的答案后还有任何问题,请回复。
标签: python mysql docker docker-compose dockerfile