docker run命令的两个apt-get参数不起作用

使用这个官方的Python镜像,我试图用docker.run命令提供一些参数。

 docker run -it --rm --name myserver -v "$PWD":/usr/src/myapp -w /usr/src/myapp python:3-slim apt-get update && apt-get install libpq-dev -y 

首先显示apt-get update的输出,然后返回:

 apt-get: command not found 

但是不知怎的,在抛出错误之前,它正确地输出了START ,apt-get更新输出和NEXT

 docker run -it --rm --name myserver -v "$PWD":/usr/src/myapp -w /usr/src/myapp python:3-slim echo "START" && apt-get -y update && echo "NEXT" && apt-get install libpq-dev -y 

就好像它不能执行多个apt-get命令一样。 为什么echo工作,但第二个apt-get没有?

为了确保这些命令在Docker上下文中执行,可以将它们绑定在bash会话中:

 docker run -it --rm --name myserver -v "$PWD":/usr/src/myapp \ -w /usr/src/myapp python:3-slim \ /bin/bash -xec 'apt-get update && apt-get install libpq-dev -y' 

这样, &&正确的 shell(容器中执行的那个)解释,而不是执行docker run那个。

但是更好的做法是在RUN指令中用一个新的Dockerfile来定义一个带有这些命令的新映像,以便使用一个libpq-dev的容器准备好被使用。