2015-01-15 21 views
19

Tôi đang sử dụng Docker trên MacOSX (với Boot2Docker).Tại sao Docker nói nó không thể thực hiện 'bash "?

tôi có thể chạy hình ảnh từ Docker Hub.

Tuy nhiên, khi tôi cố gắng chạy một trong những hình ảnh của riêng tôi như thế này:

docker run -P mylocalimage 

hoặc

docker run -P mylocalimage bin/a3-write-back 

hoặc

... 

tôi nhận được:

docker "env: can't execute 'bash': No such file or directory" 

Tôi đoán rằng nó không thể tìm thấy một nhị phân bash để thực hiện trong container, nhưng tại sao?

Những hình ảnh cơ bản là errordeveloper/oracle-jdk

Cảm ơn sự giúp đỡ nào.

Ashley.

[{ 
    "Architecture": "amd64", 
    "Author": "ABC [email protected]", 
    "Checksum": "tarsum.dev+sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", 
    "Comment": "", 
    "Config": { 
     "AttachStderr": false, 
     "AttachStdin": false, 
     "AttachStdout": false, 
     "Cmd": [], 
     "CpuShares": 0, 
     "Cpuset": "", 
     "Domainname": "", 
     "Entrypoint": [ 
      "bin/a3-write-back" 
     ], 
     "Env": [ 
      "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/jdk1.8.0_25/bin", 
      "JAVA_HOME=/usr/jdk1.8.0_25" 
     ], 
     "ExposedPorts": null, 
     "Hostname": "5bf0de3d0926", 
     "Image": "abd65ce243a5b015bb49f3e958103a5cc0c5f14938df4e480ded25f3ecf878e7", 
     "MacAddress": "", 
     "Memory": 0, 
     "MemorySwap": 0, 
     "NetworkDisabled": false, 
     "OnBuild": [], 
     "OpenStdin": false, 
     "PortSpecs": null, 
     "StdinOnce": false, 
     "Tty": false, 
     "User": "daemon", 
     "Volumes": null, 
     "WorkingDir": "/opt/docker" 
    }, 
    "Container": "987d2279b6e42195fe8e732c0637798926db6cfaeab93fcc25a3f10dac73f111", 
    "ContainerConfig": { 
     "AttachStderr": false, 
     "AttachStdin": false, 
     "AttachStdout": false, 
     "Cmd": [ 
      "/bin/sh", 
      "-c", 
      "#(nop) CMD []" 
     ], 
     "CpuShares": 0, 
     "Cpuset": "", 
     "Domainname": "", 
     "Entrypoint": [ 
      "bin/a3-write-back" 
     ], 
     "Env": [ 
      "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/jdk1.8.0_25/bin", 
      "JAVA_HOME=/usr/jdk1.8.0_25" 
     ], 
     "ExposedPorts": null, 
     "Hostname": "5bf0de3d0926", 
     "Image": "abd65ce243a5b015bb49f3e958103a5cc0c5f14938df4e480ded25f3ecf878e7", 
     "MacAddress": "", 
     "Memory": 0, 
     "MemorySwap": 0, 
     "NetworkDisabled": false, 
     "OnBuild": [], 
     "OpenStdin": false, 
     "PortSpecs": null, 
     "StdinOnce": false, 
     "Tty": false, 
     "User": "daemon", 
     "Volumes": null, 
     "WorkingDir": "/opt/docker" 
    }, 
    "Created": "2015-01-13T05:25:38.467586784Z", 
    "DockerVersion": "1.4.1", 
    "Id": "ddbd5d3f52cc5fd41605c95e4525cd2f3e0808a3741b3f8d77f46f0661945f7b", 
    "Os": "linux", 
    "Parent": "abd65ce243a5b015bb49f3e958103a5cc0c5f14938df4e480ded25f3ecf878e7", 
    "Size": 0, 
    "VirtualSize": 390826666 
} 
] 
+1

Điểm nhập liệu của bạn có đúng không? Tôi thấy '" Entrypoint ": [" bin/a3-write-back "],' nó nên là/bin thay vì bin? Bạn có thể đăng Dockerfile của mình không? – user2915097

+0

Vâng, hãy nhớ lệnh "bash" của bạn sẽ được giải thích bởi tập lệnh nhập cảnh của bạn, cũng có thể là vấn đề –

+0

Hình thức bin/a3-write-back trông như thế nào? Nếu nó là một tập lệnh bash, đó có phải là đường dẫn chính xác đến tập lệnh bash ở trên cùng không? Một điều khác để thử là 'docker run -P mylocalimage/bin/bash' và xem điều gì xảy ra từ đó, bạn nên có một trình bao. – Michael

Trả lời

55

Hình ảnh của bạn dựa trên busybox, không có vỏ bash. Nó có vỏ ở /bin/sh.

Vì vậy, điều này không làm việc:

$ docker run -it busybox bash 
exec: "bash": executable file not found in $PATH2015/01/15 11:09:08 Error response from daemon: 
Cannot start container a5074af2f81f8cc1eb0076f4ec9ada5f87be1440006f54a9b06ab701fc60176a: exec: 
"bash": executable file not found in $PATH 

Nhưng điều này không:

$ docker run -it busybox /bin/sh 
/# 

Có thể có biến chứng hơn nữa do kịch bản entrypoint của bạn, nhưng bạn luôn có thể ghi đè lên đó.

+1

Geezus Chúa Kitô này đã cho tôi mãi mãi. Cảm ơn bạn. Lưu ý điều này chỉ hoạt động trên CMD cho tôi –

Các vấn đề liên quan