如何使用 docker api 将主机卷挂载到具有可执行文件权限的 docker 容器

How to mount the volume of host to docker container with executable file permission using docker api

当我尝试使用远程 api 创建 django docker 容器时,我可以将主机卷绑定到 docker 容器卷。但是当我使用 "Cmd" 和 docker 创建时,它显示错误(不适用于 shell 命令),

<Response [500]>
Cannot start container d07b316a1d790b67442a9a4ee49de6e6f2191e14d15ebd528d752b3fad63d9b1: exec: "pip install -r requirements.txt&& python manage.py runserver 0.0.0.0:8888": executable file not found in $PATH

这是我的 json 输入。

d = {
     "Hostname": "",
     "Domainname": "",
     "User": "",
     "Memory": 0,
     "MemorySwap": 0,
     "CpuShares": 512,
     "Cpuset": "0,1",
     "AttachStdin": True,
     "AttachStdout": True,
     "AttachStderr": True,
     "Tty": True,
     "OpenStdin": True,
     "StdinOnce": False,
     "Env": "[$PATH=/usr/local/bin]",
     "Cmd": [
             "pip install -r requirements.txt&& python manage.py runserver 0.0.0.0:8888"
     ],
     "Entrypoint": "",
     "Image": "django:python3",
     "Volumes": {
             "/usr/src/app": {},
     },
     "WorkingDir": "/usr/src/app",
     "NetworkDisabled": False,
     "MacAddress": mac_id,
     "ExposedPorts": {
             "8888/tcp": {}
     },
     "SecurityOpts": [""],
     "HostConfig": {
       "Binds": ["/home/user/Sample:usr/src/app"],
       "Links": [],
       "LxcConf": {"lxc.utsname":"docker"},
       "PortBindings": { "8888/tcp": [{ "HostPort": "8888" }] },
       "PublishAllPorts": False,
       "Privileged": False,
       "ReadonlyRootfs": False,
       "Dns": ["8.8.8.8"],
       "DnsSearch": [""],
       "ExtraHosts": '',
       "VolumesFrom": [],
       "CapAdd": ["NET_ADMIN"],
       "CapDrop": ["MKNOD"],
       "RestartPolicy": { "Name": "", "MaximumRetryCount": 0 },
       "NetworkMode": "bridge",
       "Devices": []
    }
}

使用 "docker run" 命令对我来说效果很好。我该如何解决这个问题。

您确定在您的容器中安装了 pip 吗?例如,在 Debian 衍生系统上,您的 Dockerfile 应该具有:

ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get -y install python-pip

我没有使用过遥控器 API,但问题是您将它全部作为单个参数传递,所以它正在寻找一个名为 "pip install -r requirements.txt&& python manage.py runserver 0.0.0.0:8888" 的文件。

你需要弄清楚如何单独传递参数,你可能需要给pip一个绝对路径。