2015-06-21 20 views

Trả lời

52

Có một commit PR mà thêm vào doc:

Lưu ý: Lệnh này (attach) không phải là để chạy một tiến trình mới trong một container. Xem: docker exec.

Câu trả lời cho "Docker. How to get bash\ssh inside runned container (run -d)?" minh họa sự khác biệt:

(Docker> = 1.3) Nếu chúng ta sử dụng docker attach, chúng ta có thể chỉ sử dụng một ví dụ của vỏ.
Vì vậy, nếu chúng ta muốn mở nhà ga mới với trường hợp mới của vỏ container, chúng tôi chỉ cần chạy docker exec

nếu container Docker được khởi động bằng /bin/bash lệnh, bạn có thể truy cập nó bằng cách sử đính kèm, nếu không thì bạn cần phải thực hiện lệnh để tạo một thể hiện bash bên trong vùng chứa bằng cách sử dụng exec.

Như đã đề cập trong this issue:

  • Đính kèm không phải là để chạy một điều phụ trong một container, nó là để gắn với quá trình hoạt động.
  • "docker exec" là đặc biệt để chạy những thứ mới trong vùng chứa đã bắt đầu, có thể là trình bao hoặc một số quy trình khác.

Cùng một vấn đề cho biết thêm:

Trong khi attach không được cũng được đặt tên, đặc biệt là vì lệnh LXC lxc-attach (đó là giống như nhiều docker exec <container> /bin/sh, nhưng LXC cụ thể), nó có một cụ thể mục đích của nghĩa đen gắn bạn vào quá trình Docker bắt đầu.
Tùy thuộc vào quy trình xử lý có thể khác nhau, ví dụ đính kèm /bin/bash sẽ cung cấp cho bạn trình bao, nhưng đính kèm vào máy chủ đỏ sẽ giống như bạn vừa mới bắt đầu lại trực tiếp mà không cần thực hiện.

7

Khi một container được bắt đầu sử dụng/bin/bash sau đó nó trở thành container PID 1 và Docker đính kèm được sử dụng để có được bên trong PID 1 của một container. Vì vậy, docker đính kèm < container-id> sẽ đưa bạn bên trong các thiết bị đầu cuối bash như nó PID 1 như chúng tôi đã đề cập trong khi bắt đầu container. Thoát ra khỏi container sẽ dừng container.

Trong khi ở lệnh docker exec bạn có thể chỉ định trình bao bạn muốn nhập. Nó sẽ không đưa bạn đến PID 1 của container. Nó sẽ tạo ra một quy trình mới cho bash. docker exec -it < container-id> bash. Thoát khỏi vùng chứa sẽ không dừng vùng chứa.

Bạn cũng có thể sử dụng nsenter để nhập các bộ chứa bên trong. nsenter -m -u -n -p -i -t < pid container> Bạn có thể tìm thấy PID của vùng chứa bằng cách sử dụng: docker inspection < container-id> | grep PID

Lưu ý: Nếu bạn đã bắt đầu vùng chứa của mình bằng cờ d thì thoát ra khỏi vùng chứa sẽ không dừng vùng chứa, cho dù bạn dùng đính kèm hay exec để vào trong.

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