Yêu cầu thg 11 19, 2018 1:28 SA 985 0 1
  • 985 0 1
0

chỉnh sửa file trong thư mục /usr/bin/ của docker

Chia sẻ
  • 985 0 1

Chào các bạn. Mình dùng docker pull và run một images trên mạng về. Sau đó dùng lệnh cat /usr/bin/abc.sh để xem một file abc.sh thì xem được. Giờ mình muốn download, chỉnh sửa, lưu cái file đó vào thư mục /usr/bin trong docker thì có được không? Có bạn nào đã làm tương tự như vậy không? Vui lòng chia sẻ cho mình với. Mình đã tìm nó hơn 1 tuần nay rồi nhưng không ra kết quả gì? Cảm ơn mọi sự chia sẻ của các bạn/

Avatar Tran Duc Thang @thangtd90
thg 11 19, 2018 1:34 SA

Bạn có thể nói rõ hơn về câu hỏi được không, như download là download từ đâu về đâu nhỉ 🤔

ngoài ra

lưu file vào thư mục /usr/bin trong Docker

tức là là lưu vào đâu vậy bạn, lưu vào thư mục trong Docker Container, hay lưu hẳn lại trong Docker Image, để lần sau khởi động container mới từ image đó là sẽ có file luôn 🤔

Avatar Tam Hoang @babatnvn
thg 11 19, 2018 1:47 SA

@thangtd90 Cái images kia mình download ở trên trang http://github.com/ bạn ạ. Mình muốn lưu file abc.sh vào thư mục /usr/bin trong docker image.

Avatar Tran Duc Thang @thangtd90
thg 11 19, 2018 1:48 SA

@babatnvn File abc.sh của bạn đang nằm ở đâu vậy?

Nó có sẵn trong image rồi, giờ bạn muốn chỉnh sửa, và lưu lại trong image đó à 🤔

Avatar Tam Hoang @babatnvn
thg 11 19, 2018 2:00 SA

@thangtd90 File abc.sh kia mình cũng chưa biết nó nằm ở chỗ nào? Mình dùng lệnh which abc.sh để kiểm tra thì nó nằm ở đường dẫn /usr/bin/abc.sh.Mình dùng cat /usr/bin/abc.sh thì nó mở ra cho mình xem. Nhưng mình mở nó bằng notepad thì nó bảo không tìm thấy file. Bạn ơi. File abc.sh kia nằm ở trên thư mục ảo hóa container_path. Giờ mình muốn chỉnh sửa, lưu lại file abc.sh vào trong image

Avatar Tran Duc Thang @thangtd90
thg 11 19, 2018 2:13 SA

@babatnvn à, mình hiểu vấn đề của bạn rồi, đợi chút để mình viết câu trả lời hoàn chỉnh nhé 😄

1 CÂU TRẢ LỜI


Đã trả lời thg 11 19, 2018 2:23 SA
+2

Theo mình hiểu thì bạn đang gặp 2 vấn đề,

  • Làm thế nào để chỉnh sửa file abc.sh
  • Làm thế nào để lưu lại nội dung sau khi chỉnh sửa vào image

Về hướng giải quyết thì sẽ như sau:

Chỉnh sửa file abc.sh

Nhìn chung sẽ rất khó để "mò" ra được file này nằm ở đâu trong máy của bạn, bạn nên chỉnh sửa trực tiếp trong container thôi. Bạn có thể dùng các command line editor như nano, hay vim để chỉnh sửa trực tiếp, rồi lưu lại, đây là cách nhanh chóng và dễ dàng nhất rồi 😂

Nếu bạn không quen với việc sử dụng các terminal editor trên, thì bạn có thể đi theo hướng khác là mount một thư mục từ bên ngoài máy host của bạn vào bên trong container, bằng tham số -v khi chạy: docker run -ti -v host_folder:/temporary image_name /bin/bash. Với việc sử dụng Docker Volume thông qua option -v như vậy, thì thư mục trong container sẽ được link với thư mục ngoài máy host, bạn chỉ cần dùng lệnh copy file từ /usr/bin/ vào thư mục /temporary, rồi sửa bằng notepad ở bên ngoài, sau đó từ /temporary copy ngược lại /usr/bin là được.

Lưu lại nội dung vào image

Sau khi edit được nội dung file, bạn có thể lưu lại trạng thái của container hiện tại, để tạo thành image mới, bằng lệnh docker commit. Về cú pháp của lệnh này, bạn có thể tham khảo ở trang document của Docker

docker commit -m "Edit abc.sh file" your_container_id new_image_name

Tuy nhiên, cách thực hiện việc thay đổi nội dung 1 image bằng cách edit trực tiếp bên trong container rồi lưu lại bằng docker commit không phải là một cách hay, và không được khuyến khích làm. Nếu image của bạn đang dùng có public Dockerfile, bạn nên sửa trực tiếp từ file Dockerfile đó, và build lại image của riêng mình thì hơn 😄

Chia sẻ
Avatar Tam Hoang @babatnvn
thg 11 19, 2018 6:01 SA

Cảm ơn bạn rất nhiều. Mình đang thực hiện như bạn hướng dẫn. Tuy nhiên vẫn chưa có kết quả. Nếu có thể để lại cho mình địa chỉ email không?

Avatar Tran Duc Thang @thangtd90
thg 11 19, 2018 6:04 SA

@babatnvn Nếu có vấn đề gì bạn cứ để lại comment ở trên đây đi, mình không giải quyết được thì sẽ có người khác thấy và giúp đỡ bạn mà 😄

Avatar Tam Hoang @babatnvn
thg 11 19, 2018 6:08 SA

@thangtd90 bạn ơi. Khi mình dùng vim /usr/bin/abc.sh thì nó mở ra file trống. Có phải file abc.sh kia nó ở trên host_path nên không mở được không?

Avatar Tran Duc Thang @thangtd90
thg 11 19, 2018 6:13 SA

@babatnvn Ý bạn là gõ cat /usr/bin/abc.sh thì nó ra nội dung, còn vim /usr/bin/abc.sh thì nó không mở file ra à 🤔 Lúc đó thì nó báo lỗi là gì nhỉ, bạn chụp ảnh màn hình đoạn lỗi đó giúp mình được không?

Với lại bạn check lại xem trong container của mình đã có vim chưa nhỉ?

Avatar Tam Hoang @babatnvn
thg 11 19, 2018 6:26 SA

@thangtd90 Gõ cat /usr/bin/abc.sh thì nó ra nội dung, còn vim /usr/bin/abc.sh thì nó không mở file ra mà mở ra 1 file trống như hình dưới bạn ạ

Hình khi gõ cat

2.PNG .

Hình khi gõ vim

1.PNG

Avatar Tran Duc Thang @thangtd90
thg 11 19, 2018 7:03 SA

@babatnvn chạy lệnh cat mà ra nội dung mà vim lại không ra thì lạ quá nhỉ 😮 Bạn có chắc là mình đang chạy vim cũng ngay bên trong Docker container đó không nhỉ 🤔

Avatar Tam Hoang @babatnvn
thg 11 19, 2018 7:19 SA

@thangtd90 Mình cảm ơn bạn nhiều. Mình đã hiểu vấn đề và vim được file đó. Bạn ơi giờ vim được rồi. mình nhấn INSERT và chỉnh sửa sau đó dùng lệnh ":wq - lưu và thoát khỏi chế độ soạn thảo". tại sao nó không lưu cái mình đã sửa mà vẫn giữ nguyên tình trạng ban đầu. Hay do lệnh hả bạn?

Avatar Tran Duc Thang @thangtd90
thg 11 19, 2018 7:55 SA

@babatnvn

tại sao nó không lưu cái mình đã sửa mà vẫn giữ nguyên tình trạng ban đầu

cái này là bạn sửa xong, dùng :wq để save file lại, rồi ngay lập tức dùng lệnh vim để mở lại file thì không được à,

hay bạn thoát ra ngoài, dựng container mới lên thì thấy file vẫn như cũ vậy 🤔

Avatar Tam Hoang @babatnvn
thg 11 19, 2018 7:58 SA

@thangtd90 cái này là mình sửa xong, dùng :wq để save file lại, rồi ngay lập tức dùng lệnh vim để mở lại file thì không thấy hiển thị chỗ đã sửa. Mình cũng run cái image đó cũng thấy không hiển thị chỗ đã sửa.

Avatar Tran Duc Thang @thangtd90
thg 11 19, 2018 8:10 SA

@babatnvn Trước tiên, bạn thử dùng :w thôi xem sao, xem file đó đã chắc chắn được lưu lại hay chưa 🤔

Screen Shot 2018-11-19 at 3.09.08 PM.png

khi save lại thì nó sẽ có thông báo ở phía dưới, góc trái, như thế này. Bạn chú ý sẽ thấy có thông báo là written đấy.

Avatar Tam Hoang @babatnvn
thg 11 19, 2018 8:18 SA

@thangtd90 3.PNG

đã giống như bạn nói. Nhưng sau đó mình dùng lệnh cat xem lại không có gì thay đổi..Không biết mình còn sai ở đâu nữa bạn nhỉ?

Avatar Tran Duc Thang @thangtd90
thg 11 19, 2018 9:18 SA

@babatnvn Nếu đã save lại được như thế thì mình nghĩ file đó trong container của bạn đã được thay đổi rồi, bạn thử check lại ngay trong container đó xem 🤔

Còn ở trong container khác dựng từ cùng image thì vẫn chưa thể có sự thay đổi được, bạn cần commit vào image đó, như trong câu trả lời phía trên của mình ý.

Avatar Tam Hoang @babatnvn
thg 11 19, 2018 1:48 CH

@thangtd90 Bạn ơi. Vẫn không được bạn ạ. Mình commit vào image đó sao vẫn không được ? Đầu tiên mình sửa file đó=> lưu lại => commit vào cái image đó với cái tên imge mới

  1. commit =>image mới 7.PNG
  2. Đã có Image mới 8.PNG
  3. kiểm tra trong cái container mới này không thấy nó thay đổi gì cả
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí