Tôi có rất nhiều container docker mà tôi cần địa chỉ trên cùng mạng LAN với máy chủ của họ. Cho đến bây giờ, tôi đã đạt được điều này bằng cách sử dụng một cây cầu và tự gán IP cho chúng và tự mình quản lý IP. Một ví dụ khởi động sẽ như vậy:
docker run \
--net="none" \ \
--lxc-conf="lxc.network.type = veth" \
--lxc-conf="lxc.network.ipv4 = 192.168.1.3/24" \
--lxc-conf="lxc.network.ipv4.gateway = 192.168.1.254" \
--lxc-conf="lxc.network.link = br0" \
--lxc-conf="lxc.network.name = eth0" \
--lxc-conf="lxc.network.flags = up" \
-d [Docker Image ID]
Với máy chủ có cầu được xác định trong /etc/network/interfaces
(ubfox) như vậy:
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet static
address 192.168.1.2
netmask 255.255.255.0
gateway 192.168.1.254
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
Kể từ khi tôi phát hiện ra serf , tôi đã cố gắng chuyển sang sử dụng khám phá tự động trong các container, để DHCP có thể theo dõi IP và đưa chúng ra các container. Tôi đã thay đổi lệnh khởi động thành:
docker run \
--net="none" \
--lxc-conf="lxc.network.type = veth" \
--lxc-conf="lxc.network.link = br0" \
--lxc-conf="lxc.network.flags = up" \
-d [Docker Image ID]
/bin/bash
và cây cầu đến:
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
Điều này dẫn đến việc container bắt đầu, nhưng không có IP. Sau đó tôi đã nhận lời khuyên từ một bài đăng trực tuyến , người đã tìm cách hoàn thành nó với Fedora, bằng cách gọi dhclient
. Thật không may, điều này không làm việc cho tôi trong các container dựa trên Ubuntu.
Dưới đây là các thông báo lỗi sau tôi nhận được trong các điều kiện khác nhau:
Chạy
dhclient
khi tôi đã kích hoạt--privileged
khởi động container:dhclient: error while loading shared libraries: libc.so.6: cannot open shared object file: Permission denied
Chạy
sudo dhclient eth0
khi không vào--privileged
RTNETLINK answers: Operation not permitted mv: cannot move '/etc/resolv.conf.dhclient-new.31' to '/etc/resolv.conf': Device or resource busy
Chạy
sudo dhclient
hoặcdhclient
(không có giao diện được chỉ định).Trả về ngay lập tức và vẫn không có kết nối IP hoặc mạng.
Làm cách nào tôi có thể nhận các container docker để lấy IP động từ cùng một mạng con với máy chủ của chúng, để tôi có thể triển khai các container trên nhiều máy chủ mà không cần theo dõi IP?
Thông tin thêm
- Chạy
DOCKER_OPTS="-e lxc"
vào/etc/default/docker
- Máy chủ lưu trữ là Ubuntu 14.04
- Docker container được xây dựng bằng cách sử dụng
from ubuntu:14.04
trong Dockerfile.