Docker 退出 wiout 抛出错误或执行代码



我正在尝试在码头工人中运行 talend 作业,构建正常,但是当我运行容器时,它只是退出而没有任何错误。这是我的码头工人文件:

FROM store/oracle/serverjre:8
ARG talend_job=export_data_xml
ENV TALEND_JOB ${talend_job}
ENV ARGS ""
WORKDIR /opt/talend
COPY  . /opt/talend
### Install Talend Job
RUN yum install -y unzip && 
unzip ${TALEND_JOB}.zip && 
rm -rf ${TALEND_JOB}.zip && 
chmod +x ${TALEND_JOB}/${TALEND_JOB}_run.sh
VOLUME /data
CMD ["/bin/sh","-c","${TALEND_JOB}/${TALEND_JOB}_run.sh ${ARGS}"]

运行命令:

docker run -it demo:latest

它不会执行代码或引发错误。知道可能出了什么问题或至少如何调试它吗?

谢谢。

我最好的猜测是文件路径有问题。 可以通过使用以下方式运行映像来调试它:

docker run -ti demo:latest /bin/sh

为了进入容器内, 检查export_data_xml_run.sh是否在正确的路径(/opt/talend/export_data_xml(中,并尝试从那里运行它

一些值得一试的事情:

在每个命令后添加一些 echo 语句,例如:

RUN echo "About to install unzip..." && yum install -y unzip && echo "unzip installed"  
...

如果它在这里失败,你至少应该看到 echo 语句。

下面,看起来您正在将pwd设置为/opt/talend,然后执行任何pwd到同一目录的副本......实际上是一个空操作。

WORKDIR /opt/talend
COPY  . /opt/talend

最后一行,请务必将字符串参数作为单个字符串传递。我最近一直在做一些事情,我传递的两个字符串"command, input"它被视为单个字符串,而不是两个单独的字符串(这是我真正想要的(:

CMD ["/bin/sh","-c","${TALEND_JOB}/${TALEND_JOB}_run.sh ${ARGS}"]

您也可以登录 docker 容器,在运行时尝试调试它:

docker exec -it [imageId] sh

进入容器后,您可以运行各种命令来验证一切是否如您所期望的那样。

呵呵

最新更新