You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

M1 Mac通过Docker Compose启动Oracle XE容器遇ORA-01017认证失败

问题

我使用搭载Apple M1芯片的MacBook,通过Colima在M1芯片上运行Oracle容器,需要在Oracle容器上执行集成测试,因此尝试通过docker-compose.yaml定义的服务创建Oracle容器。

容器能成功启动,但无法通过本地安装的SQL Developer工具登录,出现认证错误:

Status : Failure -Test failed: ORA-01017: invalid username/password; logon denied.

奇怪的是,使用以下docker run命令启动容器,就能通过SQL Developer正常登录数据库(用户名SYS,密码secret):

docker run --name devdb -p 1521:1521 -p 5500:5500 -e ORACLE_PWD=secret container-registry.oracle.com/database/express:21.3.0-xe

而使用以下docker-compose.yaml文件启动容器时,会出现数据库登录问题:

version: '3'
services:
  oracle:
    image: container-registry.oracle.com/database/express:21.3.0-xe
    hostname: oracle
    container_name: oracle
    ports:
      - 1521:1521
      - 5500:5500
    environment:
      - ORACLE_PWD:secret
    volumes:
      - ./scripts/startup:/opt/oracle/scripts/startup

Oracle服务器启动日志显示数据库已成功启动且无错误,移除hostname、containerName和自定义启动脚本配置后问题依旧,尝试使用默认密码CHANGE_ON_INSTALL搭配SYS用户名也无法登录。

请问是什么原因导致认证失败?使用docker-compose命令时是否需要显式提供tnsnames.ora或其他配置?

解决方案

问题出在docker-compose的环境变量配置格式错误。你当前写的- ORACLE_PWD:secret是错误的写法:在environment的列表格式中,变量名和值需要用=分隔;如果用YAML字典格式,则不需要加-。

正确的配置方式有两种:

  1. 列表格式(使用=分隔):
environment:
  - ORACLE_PWD=secret
  1. 字典格式:
environment:
  ORACLE_PWD: secret

错误写法会让docker-compose把ORACLE_PWD:secret整个字符串识别为环境变量名,导致Oracle容器根本没接收到正确的ORACLE_PWD变量,自然无法用预设的密码登录。

不需要额外配置tnsnames.ora,修正环境变量格式后,用用户名SYS和密码secret即可正常登录。

内容的提问来源于stack exchange,提问作者Gunjan Shah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 13:14:55