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
如@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
图片(尽管性能有所下降)。
我在 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
如@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
图片(尽管性能有所下降)。