【问题标题】:Oracle docker container not working properly on Mac M1 BigSur [duplicate]Oracle docker 容器在 Mac M1 BigSur 上无法正常工作
【发布时间】:2021-11-03 06:30:36
【问题描述】:

我最近尝试创建一个 docker 容器并将其与我的 SQLDeveloper 连接,但我开始遇到一些奇怪的问题。 我使用以下拉取请求下载了 docker 映像:

docker pull store/oracle/database-enterprise:12.2.0.1-slim

然后我使用端口 1521 从我的 docker-desktop 启动容器。容器启动时出现警告。 enter image description here

终端消息:

docker run -d -it -p 1521:1521 --name oracle store/oracle/database-enterprise:12.2.0.1-slim
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
5ea14c118397ce7ef2880786ac1fac061e8c92f9b09070edffe365653dcc03af

现在当我尝试使用以下命令连接到数据库时:

docker exec -it 5ea14c118397 bash -c "source /home/oracle/.bashrc; sqlplus /nolog"
SQL> connect sys as sysdba;
Enter password: 
ERROR:
ORA-12547: TNS:lost contact

它显示这条消息,我使用的密码是 Oradoc_db1。

现在看到一些建议后,我尝试使用以下命令连接到 sqlplus:

 docker exec -it f888fa9d0247 bash -c "source /home/oracle/.bashrc; sqlplus / as sysdba"

SQL*Plus: Release 12.2.0.1.0 Production on Mon Sep 6 06:15:58 2021

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

ERROR:
ORA-12547: TNS:lost contact

我也尝试过更改 $ORACLE_HOME 中的 oracle 文件的权限以及执行权限,但没有成功。

请帮帮我,因为我被卡住了,不知道该怎么办。

【问题讨论】:

  • 你试过如下运行sqlplus命令吗? sqlplus / as sysdba。该消息可能是因为主机和容器 CPU 架构不匹配,并且 docker 正在使用可能导致性能问题和其他一般问题的仿真层
  • 您是否尝试在您的docker run 命令中添加--platform linux/amd64 作为选项?
  • 嗨@Noam,我尝试将sqlplus / as sysdba 运行,但它显示的错误与您在描述中看到的相同。我添加了命令 sn-p。
  • @harshitsrivastava 您是否尝试过this 文章中提出的任何解决方案?
  • 嗨@HansKilian 我已经尝试了上面提供的选项 --plateform linux/amd64 但它启动然后退出,日志如下:The database is ready for use . /usr/bin/tail: cannot open '/u01/app/oracle/diag/rdbms/orcl/ORCL/trace/alert_ORCL.log' for reading: No such file or directory /usr/bin/tail: no files remaining

标签: oracle docker kubernetes backend devops


【解决方案1】:

M1 Mac 上的 Oracle 数据库

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

  1. 安装LimaHomeBrew。 Lima 是一种非官方的“Linux macOS 子系统”,支持运行具有不同架构的 VM(例如在 ARM MacOS 之上运行 x86 操作系统):
brew install lima
  1. 创建一个新的 Impish Ubuntu(默认)虚拟机:
limactl start
  1. 选择打开编辑器以覆盖配置
  2. 使用默认编辑器 (vi) 将 arch 字段修改为以下内容(i 进入插入模式,进行更改,ESC 进入命令模式,:wq 退出并保存)。
arch: "x86_64"
  1. 运行新创建的默认 Lima VM,并将目录更改为新 VM 的主目录。 (除非另有说明,否则所有超出此范围的命令都应在新启动的 shell 中运行)。
lima
cd ~
  1. 在 Lima VM 中安装 Docker for Ubuntu(您可能需要通过打开 service-now 票证来获得商业许可证)。
  2. 将您的用户添加到 docker 组,并激活更改以便能够在没有 root 访问权限的情况下运行 docker 命令:
sudo usermod -aG docker $USER
newgrp docker
  1. 克隆包含 oracle docker 映像的 git 存储库:
git clone https://github.com/oracle/docker-images.git
  1. 通过运行以下 2 个命令,为您想要启动的 Oracle 数据库的版本和版本构建 docker 映像。 在下面的第二条命令中,请注意 18.4.0 是版本号,x 即 express 是版本。这需要很长时间(一个多小时)。
cd docker-images/OracleDatabase/SingleInstance/dockerfiles
./buildContainerImage.sh -v 18.4.0 -x
  1. 构建映像后,通过运行以下命令验证它是否可用。应该有一个名为 oracle/database 的映像,其标签与您在上述步骤中指定的版本匹配。
docker images
mkdir ~/dev

sudo chmod 775 ~/dev -R
sudo chown 54321:54321 ~/dev -R
  1. 通过运行以下命令为创建的 docker 映像启动容器(成功完成需要一个多小时)。
docker run --name oracledb \
  -d \
  -p 1521:1521 \
  -p 5500:5500 \
  -e ORACLE_PWD=oracle \
  -v ~/dev/docker/oracledb/oradata:/opt/oracle/oradata \
  -v ~/dev/docker/oracledb/scripts/setup:/opt/oracle/scripts/setup \
  -v ~/dev/docker/oracledb/scripts/startup:/opt/oracle/scripts/startup \
  oracle/database:18.4.0-xe
  1. 上述脚本可能在某些文件权限上出错。您可以使用docker logs oracledb 检查错误。如果您看到文件权限问题,请运行以下命令,然后重新运行上一步:
docker stop oracledb

sudo chmod 775 ~/dev -R
sudo chown 54321:54321 ~/dev -R
  1. 验证数据库设置是否成功:
docker logs oracledb

您应该查找以下消息:

#########################
DATABASE IS READY TO USE!
#########################
  1. 确保您可以通过 DBeaver、SQL Developer 等 GUI 或使用带有以下连接字符串的 sqlplus 命令行连接到数据库:system/oracle@127.0.0.1:1521/xe

性能

说到底,这不会是一个活泼的数据库。在后台运行的底层 qemu 进程占用 5.2 GB。相比之下,Docker Desktop 的 qemu 进程在不运行 Oracle 数据库的情况下占用了 3 GB。因此,考虑到所有因素,撞锤并没有想象中的那么大。

运行查询 SELECT owner, table_name FROM all_tables; 大约 6 秒后返回结果。

【讨论】:

    【解决方案2】:

    这里有两个问题:

    1. ARM 处理器不支持 Oracle 数据库,只有 Intel 支持。见这里:https://github.com/oracle/docker-images/issues/1814
    2. Oracle 数据库 Docker 映像仅支持以 Oracle Linux 7 或 Red Hat Enterprise Linux 7 作为主机操作系统。见这里:https://github.com/oracle/docker-images/tree/main/OracleDatabase/SingleInstance

    Oracle 数据库 ... 支持 Oracle Linux 7 和 Red Hat Enterprise Linux (RHEL) 7。有关更多详细信息,请参阅 My Oracle Support 说明:Oracle 支持在 Docker 上运行的数据库(文档 ID 2216342.1)

    引用的 My Oracle Support Doc ID 继续说,其 Docker 映像中的数据库二进制文件是专门为 Oracle Linux 主机构建的,并且也适用于 Red Hat。就是这样。

    Linux 就是这样(灵活),很多人已经让图像在 Ubuntu 等其他风格上运行,但只在 x86 处理器上运行,即使这样,Oracle 也不保证结果:你赢了'当事情没有按预期工作时(并且总是when,而不是if在 IT 中),无法获得支持或实用建议。您甚至可能无法告诉事情没有按应有的方式进行。在这种情况下,创造力并没有得到特别的回报;如果您希望它工作并获得有意义的帮助,我的建议是使用支持的硬件架构和操作系统版本。其他任何事情都是一场彻底的赌博。

    【讨论】:

      【解决方案3】:

      我想我会回答我自己的问题,它与接受的答案相似。

      由于 oracle db 的大小非常大,并且在 mac 等不同系统上处理和维护非常复杂,因此,建议使用 docker 提到的系统配置在您的系统上运行 docker 容器。

      我使用过MariaDB,也尝试过MongoDB (NoSQL) 而不是oracle,因为它们非常轻巧,不需要严格的配置即可运行,而且它们很快就运行了。我可以轻松地将它们与SQLDeveloper(MariaDB)MongoDB compass(MongoDB) 连接起来。 也有一些定制的 oracle 轻量级版本,但它们并不能完全证明可以在您的系统上运行。

      【讨论】:

        猜你喜欢
        • 2022-08-20
        • 1970-01-01
        • 1970-01-01
        • 2022-07-28
        • 1970-01-01
        • 1970-01-01
        • 2022-07-27
        • 1970-01-01
        • 2021-07-26
        相关资源
        最近更新 更多