构建WSO2 API Manager 4.2.0 Docker镜像遇目录不存在错误求助
问题分析与解决:WSO2 API Manager 4.2.0 Docker构建错误
问题描述
完成WSO2 API Manager 4.2.0配置后,参照文档制作Docker镜像:从GitHub复制Dockerfile与entrypoint,将WSO2_SERVER_DIST_URL设置为https://github.com/wso2/product-apim/archive/refs/tags/v4.2.0.zip,执行docker build -t wso2am:4.2.0 .命令时,出现错误:
chown: cannot access '/home/wso2carbon/wso2am-4.2.0': No such file or directory
相关Dockerfile代码片段:
chown: cannot access '/home/wso2carbon/wso2am-4.2.0': No such file or directory ------ Dockerfile:107 -------------------- 106 | # add the WSO2 product distribution to user's home directory 107 | >>> RUN \ 108 | >>> wget -O ${WSO2_SERVER}.zip "${WSO2_SERVER_DIST_URL}" \ 109 | >>> && unzip -d ${USER_HOME} ${WSO2_SERVER}.zip \ 110 | >>> && chown wso2carbon:wso2 -R ${WSO2_SERVER_HOME} \ 111 | >>> && mkdir ${USER_HOME}/wso2-tmp \ 112 | >>> && bash -c 'mkdir -p ${USER_HOME}/solr/{indexed-data,database}' \ 113 | >>> && chown wso2carbon:wso2 -R ${USER_HOME}/solr \ 114 | >>> && cp -r ${WSO2_SERVER_HOME}/repository/deployment/server/synapse-configs ${USER_HOME}/wso2-tmp \ 115 | >>> && cp -r ${WSO2_SERVER_HOME}/repository/deployment/server/executionplans ${USER_HOME}/wso2-tmp \ 116 | >>> && rm -f ${WSO2_SERVER}.zip
修改后的ARG配置:
ARG USER=wso2carbon ARG USER_ID=802 ARG USER_GROUP=wso2 ARG USER_GROUP_ID=802 ARG USER_HOME=/home/${USER} # build arguments for WSO2 product installation ARG WSO2_SERVER_NAME=wso2am ARG WSO2_SERVER_VERSION=4.2.0 ARG WSO2_SERVER_REPOSITORY=product-apim ARG WSO2_SERVER=${WSO2_SERVER_NAME}-${WSO2_SERVER_VERSION} ARG WSO2_SERVER_HOME=${USER_HOME}/${WSO2_SERVER} ARG WSO2_SERVER_DIST_URL=https://github.com/wso2/product-apim/archive/refs/tags/v4.2.0.zip ... RUN \ wget -O ${WSO2_SERVER}.zip "${WSO2_SERVER_DIST_URL}" \ && unzip -d ${USER_HOME} ${WSO2_SERVER}.zip \ && chown wso2carbon:wso2 -R ${WSO2_SERVER_HOME} \ && mkdir ${USER_HOME}/wso2-tmp \ && bash -c 'mkdir -p ${USER_HOME}/solr/{indexed-data,database}' \ && chown wso2carbon:wso2 -R ${USER_HOME}/solr \ && cp -r ${WSO2_SERVER_HOME}/repository/deployment/server/synapse-configs ${USER_HOME}/wso2-tmp \ && cp -r ${WSO2_SERVER_HOME}/repository/deployment/server/executionplans ${USER_HOME}/wso2-tmp \ && rm -f ${WSO2_SERVER}.zip
问题根源
从GitHub标签下载的zip包解压后,目录名称为product-apim-4.2.0,但Dockerfile中定义的${WSO2_SERVER}是wso2am-4.2.0,导致${WSO2_SERVER_HOME}指向的目录不存在,进而触发chown命令报错。
解决方法
方案1:重命名解压后的目录
在unzip命令后添加目录重命名步骤,将解压出的目录改为Dockerfile预期的名称:
RUN \ wget -O ${WSO2_SERVER}.zip "${WSO2_SERVER_DIST_URL}" \ && unzip -d ${USER_HOME} ${WSO2_SERVER}.zip \ && mv ${USER_HOME}/product-apim-${WSO2_SERVER_VERSION} ${WSO2_SERVER_HOME} \ && chown wso2carbon:wso2 -R ${WSO2_SERVER_HOME} \ && mkdir ${USER_HOME}/wso2-tmp \ && bash -c 'mkdir -p ${USER_HOME}/solr/{indexed-data,database}' \ && chown wso2carbon:wso2 -R ${USER_HOME}/solr \ && cp -r ${WSO2_SERVER_HOME}/repository/deployment/server/synapse-configs ${USER_HOME}/wso2-tmp \ && cp -r ${WSO2_SERVER_HOME}/repository/deployment/server/executionplans ${USER_HOME}/wso2-tmp \ && rm -f ${WSO2_SERVER}.zip
方案2:调整ARG变量匹配实际目录
修改WSO2_SERVER变量的值,使其与解压后的目录名称一致:
ARG WSO2_SERVER=product-apim-${WSO2_SERVER_VERSION}
这样${WSO2_SERVER_HOME}会自动指向正确的/home/wso2carbon/product-apim-4.2.0目录,无需修改后续命令。
内容的提问来源于stack exchange,提问作者Kamel HTIRA
相关产品推荐
相关产品推荐

