我在我的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
)内的根用户调用su - db2dude -c 'echo $PATH'
时,它打印/usr/local/bin:/bin:/usr/bin
。因此,PATH显然不是预期的那样。
也许有人可以弄清楚,在这一点上发生了什么。我也尝试运行Docker与“新的虚拟化框架”,这没有改变任何东西。我认为,Docker的兼容性魔术可能不是完美的,但我期待着找到某种变通办法,也许通过建立一个映像上的ibmcom/db2
。
我非常感谢你的时间和建议。提前非常感谢。
2条答案
按热度按时间cclgggtu1#
正如@mshabou的回答所述,目前还没有支持。一种方法是在Docker命令前面加上
DOCKER_DEFAULT_PLATFORM=linux/amd64
,或者在启动容器之前在shell中执行export DOCKER_DEFAULT_PLATFORM=linux/amd64
。或者,你也可以使用
colima
。按照GitHub页面上的描述安装colima
,然后以colima start --arch x86_64
的模拟模式启动它。现在你就可以用你习惯的方式使用你的ibmcom/db2
镜像了(尽管性能有所下降)。ilmyapht2#
ARM架构不支持db2,仅支持以下架构:amd64、ppc64le、s390x系列处理器
https://hub.docker.com/r/ibmcom/db2