我正在以下环境中运行应用程序:
app_runner
映像创建数据库并运行应用程序。test_runner
映像为FROM app_runner
,它连接到第一个容器中的数据库,然后连接到应用程序。app_runner
。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地址。
答案 0 :(得分:0)
您的第一个映像没有启动MySQL数据库;它唯一启动的就是主应用程序。我猜你已经安装了MySQL,但是启动容器时它没有启动。
您可能应该将应用程序和数据库拆分到单独的容器中。将标准mysql
图像用于数据库。它具有在首次启动时运行SQL文件以预填充数据库的路径。需要为应用程序映像提供一个指向数据库位置的指针。如果您已经有多主机设置,那么最简单的设置就是传入带有主机IP地址的环境变量。