Làm thế nào để chạy vi trên docker container?


101

Tôi đã cài đặt docker trên máy ảo lưu trữ của mình. Và bây giờ muốn tạo một tập tin bằng cách sử dụng vi.

Nhưng nó hiển thị cho tôi một lỗi:

bash: vi: command not found

1
vi có thể không được cài đặt bên trong thùng chứa. Bạn đã cài đặt và chạy vùng chứa nào?
Hüseyin BABAL,

1
Bạn cần phải được cụ thể hơn. Bạn đang cố chạy vi bên trong một vùng chứa, nếu có thì vùng chứa dựa trên hình ảnh nào? Có khả năng là bạn chưa cài đặt vi. (apt-get install vim)
WPP

Nó phụ thuộc vào việc imagebạn đang xây dựng từ. Hầu hết có lẽ imagebạn đang sử dụng nó nhẹ hơn nên nó chỉ có những thứ bạn cần để chạy dưới dạng hình ảnh. Bạn cần cài đặt thủ công các gói bạn cần.
ảo tưởng học

3
Có thể bạn không nên thực hiện cấu hình bên trong một vùng chứa. Làm điều đó trong Dockerfile thay thế.
Adrian Mouat,

Câu trả lời:


140

đăng nhập vào vùng chứa bằng lệnh sau:

docker exec -it <container> bash

Sau đó, chạy lệnh sau.

apt-get update
apt-get install vim

11
Nếu bạn gặp phải sự cố bị từ chối cấp phép khi chạy apt-get, bạn cần chạy trình thực thi docker với tư cách là người chủ. "docker executive -u root -it <container> bash". Sau đó, apt-get sẽ hoạt động.
java25

Cảm ơn @arunprakashpj. Lệnh duy nhất hoạt động đối với hình ảnh được tải xuống từ hệ thống lưu trữ AWS.
realPK

36

Hộp chứa của bạn có thể chưa cài đặt nó ra khỏi hộp.

Chạy apt-get install vimtrong thiết bị đầu cuối và bạn đã sẵn sàng để đi.


2
Đúng, nhưng tôi thích vim-tiny(Ubuntu)
Bến Whaley

2
Trước khi chạy 'apt-get install vim', bạn cần chạy 'apt-get update'.
user1521213

2
Đầu tiên apt-get updateTHENapt-get install vim
Yogi Ghorecha

30

Lệnh chạy tùy thuộc vào hình ảnh cơ sở bạn đang sử dụng.

Đối với Alpine, viđược cài đặt như một phần của hệ điều hành cơ sở. Cài đặt vimsẽ là:

apk -U add vim

Đối với Debian và Ubuntu:

apt-get update && apt-get install -y vim

Đối với CentOS, vithường được cài đặt với hệ điều hành cơ sở. Đối với vim:

yum install -y vim

Điều này chỉ nên được thực hiện trong giai đoạn đầu phát triển. Khi bạn nhận được vùng chứa đang hoạt động, các thay đổi đối với tệp sẽ được thực hiện đối với hình ảnh hoặc cấu hình được lưu trữ bên ngoài vùng chứa của bạn. Cập nhật tệp Dockerfile của bạn và các tệp khác mà tệp này sử dụng để tạo hình ảnh mới. Điều này chắc chắn không nên được thực hiện trong quá trình sản xuất vì những thay đổi bên trong thùng chứa là do thiết kế tạm thời và sẽ bị mất khi thùng được thay thế.


1
LỖI: Không thể khóa cơ sở dữ liệu: Quyền bị từ chối
garg10

1
Các lệnh @ garg10may cần được chạy dưới dạng root. USER rootbên trong Dockerfile thực hiện điều này, nhưng hãy đảm bảo chuyển trở lại người dùng khác của bạn. Tôi là một container đang chạy:docker exec -u root ...
BMitch

19

DÙNG CÁI NÀY:

apt-get update && apt-get install -y vim

Giải thích lệnh trên

  1. apt-get update => Sẽ cập nhật gói hiện tại
  2. apt-get install => Sẽ cài đặt gói
  3. -y => Sẽ chuyển quyền, quyền mặc định sẽ được đặt thành Có.
  4. vim => Tên gói bạn muốn cài đặt.

12

Thêm dòng sau vào Dockerfile của bạn, sau đó xây dựng lại hình ảnh docker.

RUN apt-get update && apt-get install -y vim

8

Ngoài ra, giữ cho hình ảnh docker của bạn nhỏ bằng cách không cài đặt các trình chỉnh sửa không cần thiết. Bạn có thể chỉnh sửa các tệp qua ssh từ máy chủ docker đến vùng chứa:

vim scp://remoteuser@container-ip//path/to/document

3
Điều này sẽ không chỉ hoạt động nếu vùng chứa đang chạy ssh ? Lúc đầu, tôi nghĩ đó là một ý tưởng tuyệt vời, nhưng dường như không thể thực hiện được.
Kevin,

7

Sử dụng lệnh dưới đây trong vùng chứa dựa trên Debian:

apt-get install vim-tiny

Toàn bộ hướng dẫn sử dụng trong Dockerfile:

RUN apt-get update && apt-get install --no-install-recommends -y \   
 vim-tiny \  
 && apt-get clean && rm -rf /var/lib/apt/lists/*

Nó không cài đặt các gói không cần thiết và xóa các tệp tải xuống không cần thiết, vì vậy kích thước hình ảnh docker của bạn sẽ không tăng đáng kể.


3

Để cài đặt trong vùng chứa Docker của bạn, bạn có thể chạy lệnh

docker thực thi apt-get update && apt-get install -y vim

Nhưng điều này sẽ bị giới hạn ở vùng chứa mà vim được cài đặt. Để làm cho nó có sẵn cho tất cả các vùng chứa, hãy chỉnh sửa Dockerfile và thêm

CHẠY bản cập nhật apt-get && apt-get install -y vim

hoặc bạn cũng có thể mở rộng hình ảnh trong Dockerfile mới và thêm lệnh trên. Ví dụ.

TỪ <tên hình ảnh>

CHẠY bản cập nhật apt-get && apt-get install -y vim


1

Vùng chứa bên trong (trong docker, không phải trong VM), theo mặc định, chúng không được cài đặt. Ngay cả apt-get , wget sẽ không hoạt động. Máy ảo của tôi đang chạy trên Ubuntu 17.10. Đối với tôi, quản lý gói yum đã hoạt động.

Yum không phải là một phần của debian hoặc ubuntu. Nó là một phần của mũ đỏ. Tuy nhiên, nó hoạt động trong Ubuntu và nó được cài đặt theo mặc định như apt-get

Tu cài vim, sử dụng lệnh này

yum install -y vim-enhanced 

Để gỡ cài đặt vim:

yum uninstall -y vim-enhanced 

Tương tự,

yum install -y wget 
yum install -y sudo 

-y là giả sử có nếu được nhắc cho bất kỳ q Kiệt độ nào được hỏi sau khi thực hiện yum install tên gói


0

Nếu bạn thực sự muốn một trình soạn thảo nhỏ để dọn dẹp nhà đơn giản trong một docker, hãy sử dụng nó trong Dockerfile của bạn:

RUN apt-get install -y busybox && ln -s /bin/busybox /bin/vi

Tôi đã sử dụng nó trên một docker dựa trên Ubuntu 18. (Tất nhiên bạn có thể cần một RUN apt-get updatetệp trước nhưng nếu bạn đang tạo tệp Docker của riêng mình, bạn có thể đã có tệp đó.)


0

Nếu bạn cần thay đổi một tập tin chỉ một lần. Bạn nên thực hiện thay đổi cục bộ và xây dựng hình ảnh docker mới với tệp này.

Giả sử trong hình ảnh docker, bạn cần thay đổi một tệp có tên myFile.xml theo / path / to / docker / image /. Vì vậy, bạn cần phải làm.

  1. Sao chép myFile.xml trong hệ thống tệp cục bộ của bạn và thực hiện các thay đổi cần thiết.
  2. Tạo một tệp có tên 'Dockerfile' với nội dung sau-
FROM docker-repo:tag
ADD myFile.xml /path/to/docker/image/

Sau đó, xây dựng hình ảnh docker của riêng bạn với docker build -t docker-repo:v-x.x.x .

Sau đó, sử dụng hình ảnh docker mới xây dựng của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.