Confluence docker:无法连接到mysql

Confluence docker:无法连接到mysql,docker,docker-compose,Docker,Docker Compose,我(仍然)试图通过docker和docker mysql文件建立confluence 当我运行confluence作为一项服务时,我可以很好地连接到我的数据库 当我尝试通过docker compose对docker容器执行相同操作时,我得到: SQLState - 08S01 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet sent succ

我(仍然)试图通过docker和docker mysql文件建立confluence

当我运行confluence作为一项服务时,我可以很好地连接到我的数据库

当我尝试通过docker compose对docker容器执行相同操作时,我得到:

SQLState - 08S01
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
这是我的docker compose:

version: '2'

services:
  confluence:
    image: eugenmayer/confluence:7.4.0
    build:
      context: ./
      args:
        CONFLUENCE_VERSION: 7.4.0
    container_name: confluence
    volumes:
      - confluencedata:/var/atlassian/confluence
    ports:
      - '80:8090'
      - '8091:8091'
    environment:
      - CONFLUENCE_DB_HOST=db
      - CONFLUENCE_DB_PORT=3306
      - CATALINA_OPTS=-Xms256m -Xmx1g
      - CONFLUENCE_PROXY_NAME=
      - CONFLUENCE_PROXY_PORT=
      - CONFLUENCE_PROXY_SCHEME=
      - CONFLUENCE_DELAYED_START=
      # those are preconfigurations so that we do not need to set our DB creds when installing - you can also
      # no use that and do it manually during the interactive installation
      # TODO: even though it lands in the configuration it seems to not really picked up by confluence during the installation
      - CONFLUENCE_CONFIG_PROPERTY1=hibernate.connection.driver_class
      - CONFLUENCE_CONFIG_VALUE1=org.mysql.Driver
      - CONFLUENCE_CONFIG_PROPERTY2=hibernate.connection.password
      - CONFLUENCE_CONFIG_VALUE2=jellyfish
      - CONFLUENCE_CONFIG_PROPERTY3=hibernate.connection.url
      - CONFLUENCE_CONFIG_VALUE3=mysql://confluencedb@db/confluencedb?sessionVariables=tx_isolation='READ-COMMITTED'
      - CONFLUENCE_CONFIG_PROPERTY4=hibernate.connection.username
      - CONFLUENCE_CONFIG_VALUE4=confluencedb
      #- CONFLUENCE_CONFIG_PROPERTY1=confluence.setup.server.id
      #- CONFLUENCE_CONFIG_VALUE1=BDYQ-V8CF-XUYW-DIWK
volumes:
  confluencedata:
    external: false
  postgresqldata:
    external: false
我是docker的新手,我不知道它为什么会这样做。至少可以说,将confluence作为一项服务运行并不是最佳选择,也是我使用的最后手段

下面是db的docker组合:

version: '3.3'
services:
  db:
    image: mysql:5.7
    command: --character-set-server=utf8 --collation-server=utf8_general_ci
    restart: always
    environment:
      MYSQL_DATABASE: bachelorarbeit_database
      # So you don't have to use root, but you can if you like
      MYSQL_USER: horizon
      # You can use whatever password you like
      MYSQL_PASSWORD: 1P@ssw0rt123
      # Password for root access
      MYSQL_ROOT_PASSWORD: P@ssw0rt
      MYSQL_ROOT_USER: root
    ports:
      # <Port exposed> : < MySQL Port running inside container>
      - '3310:3306'
版本:“3.3”
服务:
db:
图片:mysql:5.7
命令:--character set server=utf8--collation server=utf8\u general\u ci
重新启动:始终
环境:
MYSQL_数据库:Bachelorabeit_数据库
#因此,您不必使用root,但如果愿意,可以使用root
MYSQL\u用户:horizon
#你可以使用任何你喜欢的密码
MYSQL\u密码:1P@ssw0rt123
#根访问的密码
MYSQL\u ROOT\u密码:P@ssw0rt
MYSQL\u ROOT\u用户:ROOT
端口:
#:
- '3310:3306'

为什么要使用3310连接mysql?3306是它的标准端口

在MySQL镜像的定义中,有公开的3310作为DB端口。然而,汇流定义提到3306,JDBC字符串省略了端口,因此使用相同的方法


此外,上面关于docker network的评论将使其复杂化。

尝试向mysql实例添加默认时区


如果不坚持使用MySQL数据库,可以使用Postgres。如果你可以改变数据库,我可以为你提供一个工作docker撰写

version: '3.8'

volumes:
  pgdata:

services:
  confluence:
    depends_on:
      - postgres
    image: atlassian/confluence-server:${CONFLUENCE_VERSION:?err}
    volumes:
      - ./data/confluence:/var/atlassian/application-data/confluence:rw,cached
    ports:
      - "127.0.0.1:8090:8090"
      - "127.0.0.1:8091:8091"
    environment:
      - JVM_MINIMUM_MEMORY=1024m
      - JVM_MAXIMUM_MEMORY=1024m
      - JVM_SUPPORT_RECOMMENDED_ARGS=${DEBUG} ${MINIFICATION} ${PLUGIN_TIMEOUT} ${MAIL}
      - ATL_DB_DRIVER=org.postgresql.Driver
      - ATL_DB_TYPE=postgresql
      - ATL_JDBC_URL=jdbc:postgresql://postgres:5432/${DB:?err}
      - ATL_JDBC_USER=${DB_USER:?err}
      - ATL_JDBC_PASSWORD=${DB_PASSWORD:?err}

  postgres:
    image: postgres:${POSTGRES_VERSION:?err}
    volumes:
      - pgdata:/var/lib/postgresql/data:cached
    ports:
      - "127.0.0.1:6543:5432"
    environment:
      - POSTGRES_DB=${DB:?err}
      - POSTGRES_USER=${DB_USER:?err}
      - POSTGRES_PASSWORD=${DB_PASSWORD:?err}
使用的变量存储在docker compose文件旁边的.env文件中

CONFLUENCE_VERSION=7.7.2
POSTGRES_VERSION=9.6

PLUGIN_TIMEOUT=-Datlassian.plugins.enable.wait=120
#MAIL=-Datlassian.mail.senddisabled=true -Datlassian.mail.fetchdisabled=true -Datlassian.mail.popdisabled=true

DB=confluence772
DB_USER=confdbuser
DB_PASSWORD=passw0rd
postgres和confluence的版本在.env文件中设置

运行这个
docker compose up-d
并停止它与
docker编写站

您可以使用
docker compose exec--user root confluence/bin/bash

或者是一个带有
docker compose exec的普通shell--user confluence confluence/bin/bash

我在这台机器上使用了多个mysql容器我尝试了你的设置,遗憾的是我在授权部分被卡住了两次,不知道confluence为什么会给我一个空白屏幕。无论如何您是否尝试公开端口3310?添加3310:3310Hum…您的MySQL服务在哪里?还是单独启动MySQL docker容器?请记住,您的两个服务需要在同一个docker网络中。我分别启动它们。是否有可能运行mysql的另一个容器对运行confluence的容器不可见?Docker创建自己的网络&两个图像必须连接到同一个网络才能相互通信。更简单的方法是将两个服务放在同一个docker compose文件中,这会自动将两个服务放在同一个网络中。否则,您将需要手动将两个容器连接到同一网络。我会说,尝试旋转容器,使用docker network ls查看docker compose创建的网络的名称(很明显它是从名称中创建的)然后使用docker network Connector将您的MySQL容器连接到该网络。请在您的答案中添加一些解释和示例,以便其他人可以从中学习()。尝试更自信的方法。比如“如果你的问题是……那么解决办法就是……因为……”