Docker入口点无法正常工作

时间:2019-01-22 23:07:56

标签: docker dockerfile

我有一个Docker容器,该容器执行bash脚本作为其ENTRYPOINT。该脚本完成了许多工作,这些工作依赖于所配置的环境变量。

最奇怪的事情发生了,当我运行容器时,入口点脚本被执行,并且由于缺少更好的文字,它最终失败了。

现在,如果我手动输入容器$ docker exec -it <id> bash,然后手动运行SAME脚本,它将起作用!

这是怎么回事?为什么Docker执行脚本与我自己手动执行脚本有何不同?

更新以获取更多上下文

Dockerfile

FROM cuda:torch:cudnn # Not real source, but these are what are in play

# setup lua and python

COPY . /app
WORKDIR /app
ENTRYPOINT ["./entrypoint.py"]
CMD ["start"]

entrypoint.py

class DoSomething:

    def methods_that_work(self):
        ...    

    def run_torch(self):
        """
        I do NOT work if called from the Dockerfiles ENTRYPOINT
        I DO work if I manually run ./entrypoint.py start from within the container
        cmd = ['th', ...]
        subprocess.run(cmd)

Torch和Lua需要知道CUDA和CudNN的位置。我可以确认所有ENV变量都已设置。通过Docker ENTRYPOINT运行时,割炬只是挂了一点,没有错误,没有任何东西,只是挂了一点。

当我猛扑到容器中并手动运行./entrypoint.py时,它会起作用。

1 个答案:

答案 0 :(得分:0)

对于遇到这种情况的任何人。这显然是Lua的问题。

Lua路径期望用;而不是:来描绘,例如$PATH

$LUA_PATH=/some/path;/some/other/path

现在,为什么要在交互式bash shell中而不是通过Docker运行它?在.bashrc内部有一个“激活割炬”功能,该功能实际上是在:上将其替换为;的。

最终,这不是Docker问题,而是格式错误的Lua环境变量。