docker-entrypoint.sh:仅执行程序“ $ @”不起作用

时间:2019-10-08 16:15:21

标签: linux docker dockerfile kerberos

几天以来,我一直在努力解决此问题。

文件1:docker-entrypoint.sh

#!/bin/bash
set -e
source /home/${HADOOP_INSTALL_USERNAME}/.bashrc
kinit -kt /home/${HADOOP_INSTALL_USERNAME}/keytab/dept-test-hadoop.${HADOOP_INSTALL_ENV}.keytab dept-test-hadoop
mkdir /tmp/test222222
exec "$@"

Dockerfile:

ENTRYPOINT ["/home/dept-test-hadoop/docker-entrypoint.sh"]

docker run命令:

docker run -it hadoop-hive:v1 /bin/mkdir /tmp/test1

挑战或我正在尝试执行的命令是作为命令行参数传递给docker run命令的命令。请注意,这些命令需要进行kerberos身份验证

1)我注意到了/tmp/test222222,但是上面的docker run命令看不到像/tmp/test1的样子。我认为docker-entrypoint.sh中的我的执行"$@"没有执行。但是我可以确认脚本正在执行,因为可以看到/tmp/test222222

2)有什么方法可以分配环境变量的值?

ENTRYPOINT ["/home/dept-test-hadoop/docker-entrypoint.sh"]

1 个答案:

答案 0 :(得分:2)

只要容器创建目录,它就会退出。您的容器寿命是exec命令或docker-entrypoint的寿命,因此您的容器将在exec "$@"之后很快消失。

如果您正在寻找一种通过env创建目录的方法,则可以尝试

#!/bin/bash
set -x
source /home/${HADOOP_INSTALL_USERNAME}/.bashrc
kinit -kt /home/${HADOOP_INSTALL_USERNAME}/keytab/dept-test-hadoop.${HADOOP_INSTALL_ENV}.keytab dept-test-hadoop
mkdir $MY_DIR
ls
exec "$@"

现在将MY_DIR传递给env,但要记住漫长的过程。

docker run -it -e MY_DIR=abcd hadoop-hive:v1  "your_long_running_process_to_exec"

例如

docker run -it -e MY_DIR=abcd hadoop-hive:v1 "<hadoop command>"

如果您在exec中从ENV运行任何进程,那么您也可以尝试

#!/bin/sh
set -x
mkdir $MY_DIR
ls
exec ${START_PROCESS}

因此您可以在运行时通过

docker run -it -e MY_DIR=abcd -e START_PROCESS=my_process hadoop-hive:v1