我有一个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时,它会起作用。
答案 0 :(得分:0)
对于遇到这种情况的任何人。这显然是Lua的问题。
Lua路径期望用;
而不是:
来描绘,例如$PATH
。
$LUA_PATH=/some/path;/some/other/path
现在,为什么要在交互式bash shell中而不是通过Docker运行它?在.bashrc
内部有一个“激活割炬”功能,该功能实际上是在:
上将其替换为;
的。
最终,这不是Docker问题,而是格式错误的Lua环境变量。