我使用的是带有apple M1芯片的MAC book,我使用[Colima][1]在M1芯片上运行oracle容器
我需要在oracle容器上运行集成测试用例。我试图创建oracle容器使用在docker-compose定义的服务。yaml文件。
我能够成功启动容器,但我无法从安装在我机器上的SQL Developer工具登录。
我得到认证错误:
状态:失败-测试失败:ORA-01017:无效的用户名/密码;登录否认。
[![2]][2]
这个问题中令人惊讶的部分是,如果我使用以下docker run
命令显式地启动容器,那么DB登录与SQL Developer工具一起正常工作,但在使用compose文件和docker compose up
命令运行容器时失败。
在我用来启动容器的docker命令下面,我可以使用用户名"SYS"登录到DB。密码"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服务器启动日志,可以看到数据库服务器成功启动,没有任何错误:
[+] Running 1/1
⠿ Container oracle Created 0.1s
Attaching to oracle
oracle | Starting Oracle Net Listener.
oracle | Oracle Net Listener started.
oracle | Starting Oracle Database instance XE.
oracle | Oracle Database instance XE started.
oracle |
oracle | The Oracle base remains unchanged with value /opt/oracle
oracle | #########################
oracle | DATABASE IS READY TO USE!
oracle | #########################
oracle |
oracle | Executing user defined scripts
oracle | /opt/oracle/runUserScripts.sh: running /opt/oracle/scripts/startup/ddl.sql
oracle |
oracle | Table created.
oracle |
oracle |
oracle | 0 rows deleted.
oracle |
oracle |
oracle | 1 row created.
oracle |
oracle | DONE: Executing user defined scripts
oracle |
oracle | The following output is now a tail of the alert.log:
oracle | Starting background process CJQ0
oracle | 2023-04-03T19:29:19.672431+00:00
oracle | CJQ0 started with pid=63, OS id=424
oracle | Completed: ALTER DATABASE OPEN
oracle | 2023-04-03T19:29:21.170374+00:00
oracle | ===========================================================
oracle | Dumping current patch information
oracle | ===========================================================
oracle | No patches have been applied
oracle | ===========================================================
oracle | 2023-04-03T19:29:36.087762+00:00
oracle | System State dumped to trace file /opt/oracle/diag/rdbms/xe/XE/trace/XE_cjq0_424.trc
oracle | 2023-04-03T19:30:03.688697+00:00
oracle | XEPDB1(3):TABLE AUDSYS.AUD$UNIFIED: ADDED INTERVAL PARTITION SYS_P360 (3199) VALUES LESS THAN (TIMESTAMP' 2023-04-04 00:00:00')
我尝试删除主机名,containerName和自定义启动脚本配置,但它没有帮助。我还尝试了默认密码">CHANGE_ON_INSTALL";
是什么导致认证失败?
我需要显式地提供tnsnames吗?Ora或任何其他配置,而使用docker-compose命令?
因为我能够在运行docker run
命令的容器时登录到数据库,而不提供SID名称。因此,我认为不需要为docker-compose
也提供SID名称。
但是,这是登录问题背后的主要根源。我在docker-compose
文件中提供了如下所述的SID名称,并且我能够使用用户名登录数据库:SYS,password: secretandSID: XE.
请参考下面的docker撰写文件。
oracle:
image: container-registry.oracle.com/database/express:21.3.0-xe
hostname: oracle
container_name: oracle
environment:
- ORACLE_SID=XE
- ORACLE_PWD=secret
ports:
- "1521:1521"
- "5500:5500"
volumes:
- ./scripts/startup:/opt/oracle/scripts/startup