docker run转docker-compose后osticket容器无法运行问题排查
问题原因与解决办法
核心问题1:数据库主机名配置错误
在docker run命令中,你通过--link osticket_mysql:mysql将数据库容器映射为mysql主机名,osTicket容器可通过mysql访问数据库;但在docker-compose配置里,你把MYSQL_HOST设为localhost——容器内的localhost指向自身,而非db容器,直接导致osTicket无法连接到数据库。
核心问题2(次要):镜像不一致
docker run使用的是mariadb镜像,而docker-compose用的是mysql镜像,虽然两者兼容,但保持镜像一致可避免潜在的适配问题。
修正后的docker-compose.yaml配置
version: '3.8' services: osticket: container_name: osticket-web image: osticket/osticket environment: MYSQL_HOST: db # 修改为docker-compose中数据库服务的名称db MYSQL_USER: osticket MYSQL_PASSWORD: secret MYSQL_DATABASE: osticket # 补充原配置缺失的数据库名参数 depends_on: - db ports: - 8080:80 db: container_name: osticket-db image: mariadb # 改为与docker-run一致的mariadb镜像 restart: always environment: MYSQL_ROOT_PASSWORD: secret MYSQL_DATABASE: osticket MYSQL_USER: osticket MYSQL_PASSWORD: secret
额外注意事项
depends_on仅保证容器启动顺序,不保证数据库服务完全就绪。不过osTicket官方镜像自带数据库连接等待逻辑,修正主机名后通常能正常连接。- 原配置中的
‘3.8’是中文引号,会导致docker-compose解析错误,需改为英文单引号'3.8'。
内容的提问来源于stack exchange,提问作者JKC
相关产品推荐
相关产品推荐

