當前正在移動我們的應用程序開始使用泊塢窗。這是一個典型的後端和前端應用程序。前面沒有任何麻煩,但仍然無法發回。無法連接到數據庫泊塢窗
我有泊塢文件爲後端:
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