Apple M1 上的 Oracle 12c docker 设置

Sad*_*had 14 oracle docker oracle12c apple-m1

我正在尝试在 M1 Mac 上的 docker 中运行 Oracle db。我已经尝试了两者的图像store/oracle/database-enterprise:12.2.0.1-slimcontainer-registry.oracle.com/database/enterprise:12.2.0.1-slim但得到了相同的错误。

docker run -d -it --name oracle -v $(pwd)/db/oradata:/ORCL store/oracle/database-enterprise:12.2.0.1-slim

我还尝试了非精简版本并通过--platform linux/amd64向 docker 命令提供 。结果是一样的。

这是结果docker logs -f oracle

Setup Oracle Database
Oracle Database 12.2.0.1 Setup
Sat Jul 31 18:44:14 UTC 2021

Check parameters ......
log file is : /home/oracle/setup/log/paramChk.log
paramChk.sh is done at 1 sec

untar DB bits ......
log file is : /home/oracle/setup/log/untarDB.log
untarDB.sh is done at 29 sec

config DB ......
log file is : /home/oracle/setup/log/configDB.log
Sat Jul 31 18:44:42 UTC 2021
Start Docker DB configuration
Call configDBora.sh to configure database
Sat Jul 31 18:44:42 UTC 2021
Configure DB as oracle user
Setup Database directories ...

SQL*Plus: Release 12.2.0.1.0 Production on Sat Jul 31 18:44:43 2021

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

ERROR:
ORA-12547: TNS:lost contact


Enter user-name: SP2-0306: Invalid option.
Usage: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM|SYSBACKUP|SYSDG|SYSKM|SYSRAC}] [edition=value]]
where <logon> ::= <username>[/<password>][@<connect_identifier>]
      <proxy> ::= <proxyuser>[<username>][/<password>][@<connect_identifier>]
Enter user-name: Enter password: 
ERROR:
ORA-12547: TNS:lost contact


SP2-0157: unable to CONNECT to ORACLE after 3 attempts, exiting SQL*Plus
update password

Enter password for SYS: 
create pdb : ORCLPDB1

SQL*Plus: Release 12.2.0.1.0 Production on Sat Jul 31 18:44:43 2021

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

ERROR:
ORA-12547: TNS:lost contact


Enter user-name: SP2-0306: Invalid option.
Usage: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM|SYSBACKUP|SYSDG|SYSKM|SYSRAC}] [edition=value]]
where <logon> ::= <username>[/<password>][@<connect_identifier>]
      <proxy> ::= <proxyuser>[<username>][/<password>][@<connect_identifier>]
Enter user-name: SP2-0306: Invalid option.
Usage: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM|SYSBACKUP|SYSDG|SYSKM|SYSRAC}] [edition=value]]
where <logon> ::= <username>[/<password>][@<connect_identifier>]
      <proxy> ::= <proxyuser>[<username>][/<password>][@<connect_identifier>]
SP2-0157: unable to CONNECT to ORACLE after 3 attempts, exiting SQL*Plus
Reset Database parameters

SQL*Plus: Release 12.2.0.1.0 Production on Sat Jul 31 18:44:43 2021

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

ERROR:
ORA-12547: TNS:lost contact


Enter user-name: SP2-0306: Invalid option.
Usage: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM|SYSBACKUP|SYSDG|SYSKM|SYSRAC}] [edition=value]]
where <logon> ::= <username>[/<password>][@<connect_identifier>]
      <proxy> ::= <proxyuser>[<username>][/<password>][@<connect_identifier>]
Enter user-name: Enter password: 
ERROR:
ORA-12547: TNS:lost contact


SP2-0157: unable to CONNECT to ORACLE after 3 attempts, exiting SQL*Plus

LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 31-JUL-2021 18:44:44

Copyright (c) 1991, 2016, Oracle.  All rights reserved.

Starting /u01/app/oracle/product/12.2.0/dbhome_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 12.2.0.1.0 - Production
System parameter file is /u01/app/oracle/product/12.2.0/dbhome_1/admin/ORCLCDB/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/989db909d8df/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=0.0.0.0)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 12.2.0.1.0 - Production
Start Date                31-JUL-2021 18:44:44
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/12.2.0/dbhome_1/admin/ORCLCDB/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/989db909d8df/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
The listener supports no services
The command completed successfully

DONE!
Remove password info
Docker DB configuration is complete !
ERROR : config DB failed, please check log /home/oracle/setup/log/configDB.log for details!
OS process OFSD (ospid 188) idle for 30 seconds, exiting
2017-08-09T10:36:20.752530+00:00
ARCH: Archival disabled due to shutdown: 1090
Shutting down archive processes
Archiving is disabled
JIT: pid 563 requesting stop
2017-08-09T10:36:20.815635+00:00
Stopping background process VKTM
2017-08-09T10:36:26.581058+00:00
Instance shutdown complete (OS id: 563)
/usr/bin/tail: inotify cannot be used, reverting to polling: Function not implemented
Run Code Online (Sandbox Code Playgroud)

是M1的问题还是我的配置问题

roy*_*yka 24

M1 Mac 上的 Oracle 数据库

MacOS 不支持 Oracle 数据库,但是通过 Docker 虚拟化 Linux,它可以支持。不幸的是,尽管 Docker 支持 M1 Mac ARM 虚拟化,但 Oracle 数据库严重依赖 Docker 和 Rosetta 2 无法处理的一些低级内核调用。这使我们找到了本地运行的唯一可能的解决方案:使用完全模拟(虚拟机)。

  1. 使用HomeBrew安装Lima。Lima 是一种非官方的“Linux macOS 子系统”,支持运行具有不同架构的 VM(例如在 ARM MacOS 之上运行 x86 操作系统):
brew install lima
Run Code Online (Sandbox Code Playgroud)
  1. 创建一个新的 Impish Ubuntu(默认)虚拟机:
limactl start
Run Code Online (Sandbox Code Playgroud)
  1. 选择打开编辑器以覆盖配置
  2. 使用默认编辑器 (vi) 将arch字段修改为以下内容(i进入插入模式、进行更改、ESC进入命令模式、:wq退出并保存)。
arch: "x86_64"
Run Code Online (Sandbox Code Playgroud)
  1. 运行新创建的默认 Lima VM,并将目录更改为新 VM 的主目录。(除非另有说明,所有在此之后的命令都应在新启动的 shell 中运行)。
lima
cd ~
Run Code Online (Sandbox Code Playgroud)
  1. 在 Lima VM 中安装适用于 Ubuntu 的 Docker 。
  2. 将您的用户添加到 docker 组,并激活更改以便能够在没有 root 访问权限的情况下运行 docker 命令:
sudo usermod -aG docker $USER
newgrp docker
Run Code Online (Sandbox Code Playgroud)
  1. 从 docker hub 运行镜像
docker login
docker run -d -p 1521:1521 --name oracle store/oracle/database-enterprise:12.2.0.1
Run Code Online (Sandbox Code Playgroud)
  1. 使用默认值连接
username/password@SID: sys/Oradoc_db1@ORCLCDB
Run Code Online (Sandbox Code Playgroud)

  • 这确实有效,谢谢。我唯一改变的是,我没有构建镜像,而是使用具有开发人员层的官方镜像 https://hub.docker.com/_/oracle-database-enterprise-edition。我所要做的就是“docker login”,然后才能运行图像。 (2认同)

小智 12

如果有人仍在为这个问题苦苦挣扎,我找到了一个更好、更直接的解决方案:

  1. 安装自制软件

  2. 安装科利马

brew install colima
Run Code Online (Sandbox Code Playgroud)
  1. 安装 Docker
brew install docker
Run Code Online (Sandbox Code Playgroud)
  1. 通过设置 x86_64 架构来启动 Colima
colima start --memory 8 --arch x86_64
Run Code Online (Sandbox Code Playgroud)
  1. 测试 Docker
docker run hello-world
Run Code Online (Sandbox Code Playgroud)

注意:您应该从系统中清除与 docker 相关的所有内容以及 docker 桌面,这样您就不需要 docker 桌面