Docker退出时不会出现错误或执行代码。

问题描述 投票:1回答:2

我试图在docker中运行talend作业,构建过程中没有问题,但当我运行容器时,它只是没有任何错误地退出。这是我的docker文件。

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

没有执行代码,也没有出错。有什么办法可以解决这个问题,或者至少如何调试?

谢谢。

java docker talend
2个回答
0
投票

我最好的猜测是文件路径的问题,你可以通过运行你的镜像来调试。

docker run -ti demo:latest /bin/sh

为了进入容器内部,检查一下 export_data_xml_run.sh 是在正确的道路上(/opt/talend/export_data_xml),并尝试从那里运行它


0
投票

有些事情值得一试。

在每条命令后添加一些回声语句,例如:

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

如果这里失败了,你至少应该看到回音语句。

下面,看起来你在设置 pwd/opt/talend,然后执行复制任何在 pwd 到同一个目录下......实际上是一个空操作。

WORKDIR /opt/talend

COPY  . /opt/talend

最后这一行,一定要把字符串args传成单个字符串。我最近在做一件事,我把两个字符串以 "command, input" 而不是两个单独的字符串(这是我真正想要的)。

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

你也可以登录到docker容器中 尝试并调试它,一旦它开始运行,就可以使用:

docker exec -it [imageId] sh

一旦进入容器,你可以运行各种命令来验证一切是否如你所愿。

HTH

© www.soinside.com 2019 - 2024. All rights reserved.