【问题标题】:How to mount the volume of host to docker container with executable file permission using docker api如何使用 docker api 将主机卷挂载到具有可执行文件权限的 docker 容器
【发布时间】:2015-06-10 16:06:51
【问题描述】:

当我尝试使用远程 api 创建 django docker 容器时,我可以将主机卷绑定到 docker 容器卷。但是当我将“Cmd”与 docker create 一起使用时,它会显示错误(不适用于 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”命令对我来说效果很好。我该如何解决这个问题。

【问题讨论】:

    标签: docker file-permissions


    【解决方案1】:

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

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

    【讨论】:

    • pip 已安装。我正在尝试使用 docker api create container
    • @pheonix,出于调试目的(因为您需要检查 pippython 发生了什么)尝试将您的 CMD 指令放在一个简单的 bash 脚本中,将其加载到容器中并标记它们作为容器的入口点。你可以p
    【解决方案2】:

    我没有使用远程 API,但问题是您已将其全部作为单个参数传递,因此它正在寻找一个名为 "pip install -r requirements.txt&amp;&amp; python manage.py runserver 0.0.0.0:8888" 的文件。

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

    【讨论】:

    • 对不起?那就是问题所在;你需要弄清楚如何拆分它。
    • 即使命令是 pip install python manage.py 即显示相同的错误,即除此之外的任何命令外壳脚本
    • 查看文档。我很确定您没有正确传递参数。例如/bin/ls 将起作用,因为该路径上有一个可执行文件。 /bin/ls -a 可能无法正常工作,因为看起来包括 `-a` 的整个字符串都被解释为文件路径。
    猜你喜欢
    • 2017-06-30
    • 2017-01-01
    • 2019-12-26
    • 2021-01-13
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多