使用 Docker Compose 创建的 Docker 容器无法相互通信

问题描述 投票:0回答:1

我尝试使用 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

我已经尝试为两个容器声明一个自定义网络,但这并没有解决问题。

java docker docker-compose vaadin docker-container
1个回答
0
投票

定义网络应该是正确的步骤,否则,他们都不知道彼此。我们每个图像都有一个撰写文件。这是它对我们的看法:

您可以添加以下 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

希望对您有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.