将docker run命令转换为docker compose是不起作用的



我正在尝试部署以下图像osticke/osticket-Docker图像| Docker Hub

在快速入门指南中,他们有这个命令行docker为mysql和应用程序osticket运行命令。

快速启动

确保您有一个运行的MySQL容器,osTicket可以用来存储其数据。

docker run --name osticket_mysql -d -e MYSQL_ROOT_PASSWORD=secret   -e MYSQL_USER=osticket -e MYSQL_PASSWORD=secret -e
MYSQL_DATABASE=osticket mariadb

现在运行此映像并链接MySQL容器。

docker run --name osticket -d --link osticket_mysql:mysql -p 8080:80 osticket/osticket

当我完全按照上面所示执行这两个命令时,网站通过http://localhost:8080/scp/工作。

现在,我试图将其放入docker-compose.yaml文件:

version: ‘3.8’
services:
osticket:
container_name: osticket-web
image: osticket/osticket
environment:
MYSQL_HOST: localhost
MYSQL_PASSWORD: secret
depends_on:
- db
ports:
- 8080:80
db:
container_name: osticket-db
image: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: osticket
MYSQL_USER: osticket
MYSQL_PASSWORD: secret

当我查看状态时,osticket web退出

NAME COMMAND SERVICE STATUS PORTS
osticket-db “docker-entrypoint.s…” db running 3306/tcp, 33060/tcp
osticket-web “entrypoint” osticket exited (1)

看看日志,上面写着:

Install/Update osTicket
Configuring mail settings
OSTicket cron job is set to run every 5 minutes
Using external MySQL connection
Waiting for database TCP connection to become available…
Waited for 15 seconds…
Waited for 30 seconds…
Waited for 45 seconds…
Waited for 60 seconds…
Waited for 75 seconds…
Waited for 90 seconds…
Waited for 105 seconds…
Waited for 120 seconds…
Waited for 135 seconds…
Waited for 150 seconds…
Waited for 165 seconds…
Waited for 180 seconds…
************** INSTALLER FATAL ERROR ***************Timed out waiting for database TCP connection
****************************************************Die :(%

为什么docker compose版本不起作用,但执行2个docker run命令却起作用?

有两个问题。第一个是MYSQL_HOST必须更改为服务的名称,即db。第二,osTicket运行在PHP 7上,推荐使用MySQL 5.5。MySQL 8中更改了默认的身份验证方法,这对旧客户端来说是未知的。

显然,有几个选择。

  1. 使用旧版本的MySQL
  2. 使用配置文件在[mysqld]部分中设置default_authentication_plugin=mysql_native_password,如上面链接中所述
  3. 我能够通过更改osTicket用户来使用docker compose启动osTicket

For 3:首先使用docker-compose up -d db启动数据库,然后执行docker exec osticket-db mysql -e "ALTER USER 'osticket'@'%' IDENTIFIED WITH mysql_native_password BY 'secret'" -uroot -psecret,将用户'osticket'@'%'的身份验证方法更改回旧的mysql_native_password机制。最后调用docker-compose up -d来启动剩余的服务。

最新更新