我正在制作一个dockerfile来安装elasticsearch:6.5.4,并将一些文件添加到所需的位置,并运行名为test.sh的脚本,以在elasticsearch运行时创建一个新的索引。
我不确定是否应该使用RUN、CMD或ENTRYPOINT来实现这个目标。
当我注释掉最后一行(包含RUN/CMD/ENTRYPOINT test.sh)并成功构建了一个镜像并运行了容器时,我能够从容器的bash中运行test.sh并获得所需的结果。
但是,当我尝试为同样的过程构建一个镜像时,我会遇到以下错误:
我想在容器中运行elasticsearch,并为elasticsearch创建一个新索引。
我不确定是否应该使用RUN、CMD或ENTRYPOINT来实现这个目标。
当我注释掉最后一行(包含RUN/CMD/ENTRYPOINT test.sh)并成功构建了一个镜像并运行了容器时,我能够从容器的bash中运行test.sh并获得所需的结果。
但是,当我尝试为同样的过程构建一个镜像时,我会遇到以下错误:
$ docker build -t es .
Sending build context to Docker daemon 7.499MB
Step 1/8 : FROM elasticsearch:6.5.4
---> 93109ce1d590
Step 2/8 : WORKDIR /app
---> Running in 6b6412093d53
Removing intermediate container 6b6412093d53
---> a374ab69eb1a
Step 3/8 : ADD . /app
---> 6ed98ee7ad49
Step 4/8 : COPY test.sh .
---> 42184ec64c09
Step 5/8 : ADD analysis /usr/share/elasticsearch/config/analysis
---> 5a96f2098dd7
Step 6/8 : EXPOSE 9202
---> Running in 6c44b54dcc77
Removing intermediate container 6c44b54dcc77
---> d8723189c843
Step 7/8 : EXPOSE 9200
---> Running in c571b4cba1fa
Removing intermediate container c571b4cba1fa
---> 8fa11b03051e
Step 8/8 : RUN "sh test.sh"
---> Running in cf2e8cb3fd37
/bin/sh: sh test.sh: command not found
The command '/bin/sh -c "sh test.sh"' returned a non-zero code: 127
我尝试了不同的RUN、CMD和ENTRYPOINT组合来完成第8步。
我的Dockerfile如下:
FROM elasticsearch:6.5.4
WORKDIR /app
ADD . /app
COPY test.sh .
ADD analysis /usr/share/elasticsearch/config/analysis
EXPOSE 9202
EXPOSE 9200
RUN "sh test.sh"
我想在容器中运行elasticsearch,并为elasticsearch创建一个新索引。
bash scriptname
或sh scriptname
运行它,则无需进行chmod
。建议人们优先选择 Bash 而不是sh
是可疑的;至少,您应该解释一下它们之间的区别。(另请参见 sh 和 bash 之间的区别) - tripleee