我试图在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
没有执行代码,也没有出错。有什么办法可以解决这个问题,或者至少如何调试?
谢谢。
我最好的猜测是文件路径的问题,你可以通过运行你的镜像来调试。
docker run -ti demo:latest /bin/sh
为了进入容器内部,检查一下 export_data_xml_run.sh
是在正确的道路上(/opt/talend/export_data_xml
),并尝试从那里运行它
有些事情值得一试。
在每条命令后添加一些回声语句,例如:
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