2016-05-17 21 views
9

Tôi muốn cung cấp cho người dùng root của mình trong vùng chứa (centos:6) Docker .bashrc. Tuy nhiên, khi tôi chạy container của mình, tôi thấy rằng .bashrc chưa được cung cấp. Điều này có thể được thực hiện?Cách .bashrc cho thư mục gốc trong Docker

build My lệnh:

... 
RUN touch .bashrc 
RUN echo "iptables -t nat -A OUTPUT -d hostA -p tcp --dport 3306 -j DNAT --to hostB" >> .bashrc 
... 

tôi chạy lệnh:

docker run -it --cap-add=NET_ADMIN myImage /bin/bash 
+0

cố gắng để đưa 2 lệnh của bạn trong một 'CMD' ngăn cách bởi một ';' và xây dựng lại/relaunch – user2915097

+0

Vì vậy, nếu tôi làm điều đó và chạy nó không có phần '/ bin/bash' của lệnh chạy, nó chạy nhưng không cho tôi điều khiển tương tác của vùng chứa. –

+0

Ý tôi là, khi hình ảnh mới của bạn được tạo, sau đó 'docker run -it --cap-add = NET_ADMIN mynewimage/bin/bash' – user2915097

Trả lời

5

Hóa ra tôi đã thêm tệp không chính xác. Nó phải là /root/.bashrc thay vì chỉ .bashrc. Với tệp được thêm vào đúng vị trí, không cần chạy lệnh hoặc CMD.

Build

... 
ADD iptables /iptables 
RUN touch /root/.bashrc \ 
&& cat iptables >> /root/.bashrc 
... 

Run

docker run -it --cap-add=NET_ADMIN myImage /bin/bash 
0

Các manpage bash khẳng định rằng .bashrc được đọc wheb vỏ là tương tác. Vì vậy, nếu bạn muốn một bash đọc .bashrc, bạn cần khởi động bash với -i.

Thấy rằng:

[email protected]:~# echo 'echo this is .bashrc' > /tmp/bashrc 
[email protected]:~# docker run -ti -v /tmp/bashrc:/root/.bashrc debian bash -i 
this is .bashrc 
[email protected]:/# 

Nhưng, thực hiện bash -i như thế này trong container, đè entrypoint hoặc cmd, vì vậy bạn có thể tốt hơn với gói lệnh iptables và entrypoint bạn đang ban đầu sử dụng trong một vỏ script trở thành entrypoint/cmd của bạn.

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