Dockerfile中写入ENTRYPOINT "gpfdist",启动docker容器时正常;但是写入ENTRYPOINT "gpfdist -p 8081 &"就会在启动时报错/bin/sh: gpfdist -p 8081 &: command not found
时间: 2024-03-06 18:51:56 浏览: 100
在Dockerfile中使用`ENTRYPOINT`指令时,如果指定的命令需要带参数,可以使用数组的形式来定义,例如:
```
ENTRYPOINT ["gpfdist", "-p", "8081", "&"]
```
这样就可以将`gpfdist`命令和参数一起作为整个命令传递给`ENTRYPOINT`,其中`&`表示在后台运行。
如果你在`ENTRYPOINT`中使用字符串的形式来定义命令和参数,那么Docker会将整个字符串作为一个命令来执行,因此会出现找不到命令的错误。
所以你可以尝试将`ENTRYPOINT`修改为数组形式来解决问题。
相关问题
我试图在Dockerfile的ENTRYPOINT中写入命令["sh", "-c", "gpfdist -d /usr/local -p 8081 &"],但导致无法启动容器;如果改成["sh", "-c", "gpfdist -d /usr/local -p 8081"]则能正常启动,但我希望gpfdist服务在后台启动,并且启动之后还希望执行其他指令,需要怎么写Dockerfile才能满足要求?
您可以尝试将ENTRYPOINT中的命令改写成:
```
ENTRYPOINT ["sh", "-c", "gpfdist -d /usr/local -p 8081 & exec \"$@\"", "--"]
```
这里使用了exec命令,它会替换当前进程,让后面的命令作为第一个进程运行,同时&符号将gpfdist进程放到后台运行。
在启动容器时,可以传递其他需要执行的指令,例如:
```
docker run -it your_image /bin/bash
```
这样就可以在gpfdist服务启动后,进入容器并执行其他指令了。
阅读全文