ibmcom/db2 docker 图像在 m1 上失败

ibmcom/db2 docker image fails on m1

我在 M1-Max MacBook Pro(32 GB RAM)上通过 Docker 在 macOS 上设置 DB2 时遇到问题。我已经看过 this question,这可能是相关的,但是没有太多信息,我不能确切地说,如果它是关于完全相同的东西。 我设置了以下 docker-compose.yml:

version: '3.8'

services:
  db2:
    image: ibmcom/db2
    platform: linux/amd64
    container_name: db2-test
    privileged: true
    environment:
      LICENSE: "accept"
      DB2INSTANCE: "db2dude"
      DB2INST1_PASSWORD: "db2pw"
      DBNAME: "RC1DBA"
      BLU: "false"
      ENABLE_ORACLE_COMPATIBILITY: "false"
      UPDATEVAIL: "NO"
      TO_CREATE_SAMPLEDB: "false"
      REPODB: "false"
      IS_OSXFS: "true"
      PERSISTENT_HOME: "true"
      HADR_ENABLED: "false"
      ETCD_ENDPOINT: ""
      ETCD_USERNAME: ""
      ETCD_PASSWORD: ""
    volumes: 
       - ~/workspace/docker/db2-error/db2/database:/database
       - ~/workspace/docker/db2-error/db2/db2_data:/db2_data
    ports:
      - 50000:50000

在我的 Intel-MacBook 上,这没有任何问题,在我的 M1-MacBook 上,但是我在 Task #4 完成后看到,我在 STDOUT 中看到以下部分:

DBI1446I  The db2icrt command is running.


DBI1070I  Program db2icrt completed successfully.


(*) Fixing /etc/services file for DB2 ... 
/bin/bash: db2stop: command not found

据我所知,(*) Fixing /etc/services file for DB2 ... 的存在似乎已经是错误的(因为它没有出现在我的情报日志中,而且听起来也不太正常)和 /bin/bash: db2stop: command not found由于 /var/db2_setup/include/db2_common_functions 的第 81 行出现,其中说明 su - ${DB2INSTANCE?} -c 'db2stop force'。 据我了解,su - 应该 运行 与目标用户的路径。在主目录中的每个 .profile.bashrc 中,正在获取 ~/sqllib/db2profile(通过 . /database/config/db2dude/sqllib/db2profile)。

然而,当在容器 (docker exec -it db2-test bash) 中以 root 身份调用 su - db2dude -c 'echo $PATH' 时,它会打印 /usr/local/bin:/bin:/usr/bin。因此,PATH显然不是预期的。

也许有人可以弄清楚,此时发生了什么。我还尝试 运行ning Docker 使用“新虚拟化框架”,但没有任何改变。我认为,Docker 的兼容性魔法可能并不完美,但我期待找到某种解决方法,也许可以在 ibmcom/db2.

上构建图像

非常感谢您抽出时间提出建议。非常感谢。

db2 在 ARM 架构上不受支持,仅支持这些架构:amd64、ppc64le、s390x

https://hub.docker.com/r/ibmcom/db2

如@mshabou 的回答所述,尚无支持。你仍然可以让它工作的一种方法是在你的 Docker 命令前面加上 DOCKER_DEFAULT_PLATFORM=linux/amd64 或在启动容器之前在你的 shell 中执行 export DOCKER_DEFAULT_PLATFORM=linux/amd64

或者,您也可以使用 colima。按照 GitHub page 中的说明安装 colima,然后以 colima start --arch x86_64 等仿真模式启动它。现在您将能够按照您习惯的方式使用您的 ibmcom/db2 图片(尽管性能有所下降)。