连接到Docker内部的数据库失败

时间:2018-08-13 06:10:06

标签: mysql docker

我正在以下环境中运行应用程序:

  • app_runner映像创建数据库并运行应用程序。
  • test_runner映像为FROM app_runner,它连接到第一个容器中的数据库,然后连接到应用程序。
  • 机器1运行app_runner
  • 机器2运行test_runner

运行此命令时,机器2上的容器成功连接到应用程序,但无法连接到数据库。

runner.df

WORKDIR /opt/user/application
COPY *.sql ./
COPY app.tgz ./
EXPOSE 4210
EXPOSE 3306
RUN tar xzf app.tgz
mysql -hlocalhost -uroot --port=3306 < create_schema.sql
mysql -hlocalhost -uroot --port=3306 < create_data.sql
cd app/
./bin/app_name

test_runner.df

FROM app_runner:latest
WORKDIR /opt/user/app
COPY automated_tests/ .
CMD pybot ./Tests

机器1:

docker build --tag app_runner:latest -f runner.df .
docker run -p 4210:4210 -p 3306:3306 -itd app_runner:latest

机器2:

docker build --tag test_runner:latest -f test_runner.df .
docker run -it test_runer:latest

给出错误:

  

OperationalError:(2003年,“无法连接到'10 .113.10.28'(111)上的MySQL服务器”)

其中10.113.10.28是计算机1的IP地址。

1 个答案:

答案 0 :(得分:0)

您的第一个映像没有启动MySQL数据库;它唯一启动的就是主应用程序。我猜你已经安装了MySQL,但是启动容器时它没有启动。

您可能应该将应用程序和数据库拆分到单独的容器中。将标准mysql图像用于数据库。它具有在首次启动时运行SQL文件以预填充数据库的路径。需要为应用程序映像提供一个指向数据库位置的指针。如果您已经有多主机设置,那么最简单的设置就是传入带有主机IP地址的环境变量。