当前正在移动我们的应用程序开始使用泊坞窗。这是一个典型的后端和前端应用程序。前面没有任何麻烦,但仍然无法发回。无法连接到数据库泊坞窗
我有泊坞文件为后端:
FROM williamyeh/java8
RUN apt-get -y update && apt-get install -y maven
WORKDIR /explorerbackend
ADD settings.xml /root/.m2/settings.xml
ADD pom.xml /explorerbackend
ADD src /explorerbackend/src
RUN ["mvn", "clean", "install"]
ADD target/explorer-backend-1.0.jar /explorerbackend/app.jar
RUN sh -c 'touch /explorerbackend/app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /explorerbackend/app.jar" ]
和泊坞文件为MySQL:
FROM mysql
ADD createDB.sql /docker-entrypoint-initdb.d
我使用一个单独的文件,码头工人为MySQL,而不是仅仅使用泊坞窗图像的原因 - 必须在开始时创建2个数据库(否则后端将不会启动)
createDB.sql文件看起来像:
CREATE DATABASE IE;
CREATE DATABASE IE_test;
现在我有这应该开始2个容器,使后端连接到数据库搬运工 - compose.yml文件:
version: "3.0"
services:
database:
environment:
MYSQL_ROOT_PASSWORD: root
build:
context: *PATH_TO_DIR_WITH_DOCKERFILE*
dockerfile: Dockerfile
ports:
- 3306:3306
volumes:
- db_data:/var/lib/mysql
backend:
build:
context: *PATH_TO_DIR_WITH_DOCKERFILE*
dockerfile: Dockerfile
ports:
- 3000:3000
depends_on:
- database
volumes:
db_data:
当我运行命令泊坞窗,构成了数据库容器启动和运行,而后端失败:
backend_1 | java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
但是我能够登录到数据库容器,我也看到数据库创建:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| IE |
| IE_test |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.00 sec)
我看可能与阳明后端的属性文件的唯一原因:
app:
data-base:
name: IE
link: database
port: 3306
.................
从前端的容器,我能ping通数据库(但我是不允许放入属性文件只链接:数据库):
[email protected]:/frontend# ping database
PING database (172.19.0.2): 56 data bytes
64 bytes from 172.19.0.2: icmp_seq=0 ttl=64 time=0.086 ms
64 bytes from 172.19.0.2: icmp_seq=1 ttl=64 time=0.088 ms
所以,我想这是从后端容器ping的为好,但为什么它无法连接到数据库服务器?
我仍然遇到同样的错误,即使应用5秒延迟。我仍然认为根本原因是应用程序属性文件,即这行:**链接:数据库** – Viacheslav
我不相信这是正确的,因为我可以启动一个MySQL容器并从同事机器连接而没有问题 – Rawkode