2013-06-30 31 views
10

Tôi quen với LXC và muốn dùng thử docker. Vấn đề tôi đang phải đối mặt là tôi không thể tìm thấy một cách để chỉ nói docker để bắt đầu một container trong nền, mà không cần thực hiện một lệnh. Ví dụ, với LXC tôi sẽ làm:Khởi chạy một vùng chứa bằng Docker mà không chỉ định lệnh

lxc create -t ubuntu -n my_container

lxc-start -n my_container -d

Tại thời điểm này, tôi sẽ có một container chạy tôi có thể sử dụng như bất kỳ máy ảo (ssh vào nó, cài đặt công cụ ở trong đó ...) Dường như docker ngăn chặn loại sử dụng này. Tui bỏ lỡ điều gì vậy ?

Trả lời

8

Với Docker, từ CLI, bạn không thể tạo một container mà không cần chạy một lệnh trên đó. Nếu bạn muốn sử dụng REST Api, bạn có thể gọi điểm cuối 'tạo' mà không cần 'bắt đầu'.

Tuy nhiên, nó sẽ không tốt cho bạn.

Trong hầu hết các trường hợp, bạn có thể chỉ muốn chạy một vùng chứa có bash docker run -t -i ubuntu bash và làm công cụ ở đó. Một khi bạn đã làm tất cả mọi thứ bạn cần, bạn chỉ có thể cam kết và chạy từ thời điểm này.

Thông thường tuy nhiên, tốt hơn là thực hiện từng bước một để giữ lịch sử rõ ràng. Hãy xem xét công cụ tạo Docker :)

+0

Cảm ơn bạn! Họ phải hạ thấp sức mạnh lên hệ điều hành "container" !! chạy lệnh 'ps -ef' bên trong một thùng chứa chỉ xuất ra quá trình tôi đang chạy. Bất kỳ ý tưởng làm thế nào họ đạt được điều này? – rmonjo

+0

Đây là không gian tên PID. – creack

2

Bạn có thể tạo hình ảnh Docker bao gồm lệnh chạy và cấu hình khác, sao cho số docker run <image> sẽ khởi động vùng chứa. Cách dễ nhất để thực hiện việc này là với CMD từ số Docker Builder. Bạn sẽ cần phiên bản Docker mới hơn (> 0.4.6?).

Ngoài việc sử dụng Trình tạo Docker, hãy kiểm tra các cờ cho docker commitdocker run (nơi đối số lệnh là tùy chọn).

+1

đối số lệnh thực sự là tùy chọn theo tài liệu, tuy nhiên, 'docker run -d b750fe79269d' đang phàn nàn về" không có lệnh được chỉ định " – rmonjo

+1

@rmonjo bạn nhận được lỗi đó khi không có CMD được chỉ định trong Dockerfile. Đơn giản thêm vào cuối 'docker run' những gì bạn muốn chạy bên trong container. ví dụ. bash –

8

Khi tôi cần kiểm tra vùng chứa docker mà tôi đã tạo đang gặp sự cố khi chạy CMD bình thường trong Dockerfile, tôi nhận xét lệnh đó và thay thế bằng lệnh "sleep" để chỉ tạm dừng vùng chứa khi nó bắt đầu để tôi có thể đăng nhập vào nó và kiểm tra cài đặt.

Trong Dockerfile

CMD ["sleep","3600"] 

Để đăng nhập vào Docker dụ chạy

docker exec -i -t <Container ID> bash 
0

Thêm một vài suy nghĩ thêm ở đây khi tôi đang chơi xung quanh với điều này bản thân mình.

Hãy nói rằng tôi muốn làm việc với 3 container Docker:

[email protected]:~$ docker run --name ubuntuContainer1 -itd ubuntu 
2ce602710fb9b84b6530e5a1072961627e91731aba8f8b019f346fc78df08d7c 
[email protected]:~$ docker run --name ubuntuContainer2 -itd ubuntu 
e32b0eb72456fc23222f3915c91afc77e06a7e37a073b11f7088fabe8fa4bf20 
[email protected]:~$ docker run --name ubuntuContainer3 -itd ubuntu 
40574f704dceb0378f48ebe01d014d598434093d649be13573911d9833d9825d 

Thấy rằng họ tiếp tục chạy, mặc dù tôi không yêu cầu để chạy/bin/bash rõ ràng

[email protected]:~$ docker ps 
CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES 
40574f704dce  ubuntu    "/bin/bash"   2 seconds ago  Up 1 seconds       ubuntuContainer3 
e32b0eb72456  ubuntu    "/bin/bash"   5 seconds ago  Up 4 seconds       ubuntuContainer2 
2ce602710fb9  ubuntu    "/bin/bash"   8 seconds ago  Up 7 seconds       ubuntuContainer1 

tôi có thể đưa vào các thùng chứa

[email protected]:~$ docker attach ubuntuContainer1 
[email protected]:/# 

Tôi có thể thực hiện các lệnh (ví dụ: cài đặt gói) trong ngăn chứa r

[email protected]:/# apt-get update 

# ... omitting output 

[email protected]:/# apt-get install nodejs 
Reading package lists... Done 
Building dependency tree  
Reading state information... Done 
The following extra packages will be installed: 
    libc-ares2 libv8-3.14.5 
The following NEW packages will be installed: 
    libc-ares2 libv8-3.14.5 nodejs 
0 upgraded, 3 newly installed, 0 to remove and 5 not upgraded. 
Need to get 1912 kB of archives. 
After this operation, 7538 kB of additional disk space will be used. 
Do you want to continue? [Y/n] Y 

# ... omitting output 

Processing triggers for libc-bin (2.19-0ubuntu6.6) ... 
[email protected]:/# nodejs --version 
v0.10.25 

Sau đó, tôi có thể thoát ra, và giữ cho mọi thứ chạy bằng cách nhấn tổ hợp phím CTRL-p CTRL-q

[email protected]:/# [email protected]:~/$ 
[email protected]:~/$ 

Xem thêm: