我尝试使用 docker compose 设置两个 Docker 容器(Vaadin 应用程序和 MariaDB 数据库)。
docker-compose.yml:
version: "3.8"
services:
vaadin-app:
build:
context: .
container_name: vaadin-app
ports:
- 8080:8080
depends_on:
- mariadb
mariadb:
image: "mariadb:10.5.8"
container_name: mariadb
environment:
MYSQL_ROOT_PASSWORD: test
MYSQL_DATABASE: Test
MYSQL_USER: test2
MYSQL_PASSWORD: test2
volumes:
- data:/var/lib/mysql
ports:
- 3306:3306
volumes:
data:
Dockerfile:
FROM openjdk:17-jdk-slim
COPY target/contacts-md-1.0-SNAPSHOT.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app.jar"]
应用程序属性:
server.port=${PORT:8080}
logging.level.org.atmosphere = warn
spring.mustache.check-template-location = false
# Launch the default browser when starting the application in development mode
vaadin.launch-browser=true
# To improve the performance during development.
# For more information https://vaadin.com/docs/flow/spring/tutorial-spring-configuration.html#special-configuration-parameters
vaadin.whitelisted-packages=com.vaadin,org.vaadin,dev.hilla,com.example.contacts
spring.jpa.defer-datasource-initialization=true
# Database stuff
spring.datasource.url=jdbc:mysql://mariadb:3306/Test
spring.datasource.username=test2
spring.datasource.password=test2
spring.sql.init.mode=always
# Hibernate stuff
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
spring.jpa.hibernate.ddl-auto=update
当我尝试使用 docker-compose 进行设置时,vaadin-app 容器会在几秒钟后退出,并收到以下错误日志:
vaadin-app | Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure
vaadin-app |
vaadin-app |
vaadin-app | The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
vaadin-app | at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na]
vaadin-app | at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[na:na]
vaadin-app | at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na]
vaadin-app | at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[na:na]
vaadin-app | at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[na:na]
vaadin-app | at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61) ~[mysql-connector-java-8.0.26.jar!/:8.0.26]
vaadin-app | at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) ~[mysql-connector-java-8.0.26.jar!/:8.0.26]
vaadin-app | at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151) ~[mysql-connector-java-8.0.26.jar!/:8.0.26]
vaadin-app | at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167) ~[mysql-connector-java-8.0.26.jar!/:8.0.26]
vaadin-app | at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89) ~[mysql-connector-java-8.0.26.jar!/:8.0.26]
vaadin-app | at com.mysql.cj.NativeSession.connect(NativeSession.java:119) ~[mysql-connector-java-8.0.26.jar!/:8.0.26]
vaadin-app | at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:948) ~[mysql-connector-java-8.0.26.jar!/:8.0.26]
vaadin-app | at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:818) ~[mysql-connector-java-8.0.26.jar!/:8.0.26]
vaadin-app | ... 62 common frames omitted
vaadin-app | Caused by: java.net.ConnectException: Connection refused
vaadin-app | at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na]
vaadin-app | at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672) ~[na:na]
vaadin-app | at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) ~[na:na]
vaadin-app | at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597) ~[na:na]
vaadin-app | at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) ~[na:na]
vaadin-app | at java.base/java.net.Socket.connect(Socket.java:633) ~[na:na]
vaadin-app | at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:156) ~[mysql-connector-java-8.0.26.jar!/:8.0.26]
vaadin-app | at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63) ~[mysql-connector-java-8.0.26.jar!/:8.0.26]
vaadin-app | ... 65 common frames omitted
我已经尝试为两个容器声明一个自定义网络,但这并没有解决问题。
定义网络应该是正确的步骤,否则,他们都不知道彼此。我们每个图像都有一个撰写文件。这是它对我们的看法:
您可以添加以下 mariadb 端口
networks:
- my-sql-network
最后应该是
networks:
my-sql-network:
name: my-sql-network
driver: bridge
Apps yaml 中几乎相同:
networks:
- my-sql-network
最后
networks:
my-sql-network:
external: true
希望对您有帮助!