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
的容器准备好被使用。