Masalah setup Docker & Docker-Compose dengan jaringan ipvlan

Hai semuanya,

Saya sedang mencoba mengatur beberapa container—pertama menggunakan Docker Compose, tapi itu tidak berhasil. Jadi saya mencoba memulai lebih sederhana dengan Docker biasa, tapi itu juga gagal.

Pada akhirnya, saya perlu menjalankan 4 container yang dapat saling berkomunikasi. Rencananya adalah:

  • 3 container pada jaringan ipvlan.
  • 1 container dalam mode host (karena perlu mengakses port USB).

Untuk mempermudah pengujian, saya menulis skrip dasar yang menarik dan menjalankan container Alpine.

Berikut skrip saya:

#!/bin/sh

# 1. hapus semuanya
docker network rm qnap-ipvlan 2>/dev/null || true
docker rm -f alpine 2>/dev/null || true

# 2. Buat jaringan ipvlan (mode L2)
# docker network create -d ipvlan --subnet=10.159.2.0/24 --gateway=10.159.2.4 --ip-range=10.159.2.96/28 -o parent=eth1 -o ipvlan_mode=l2 qnap-ipvlan

docker network create -d ipvlan --subnet=10.159.2.0/24 --gateway=10.159.2.4 --ip-range=10.159.2.96/28 -o parent=eth1 -o ipvlan_mode=l2 -o ipvlan_flags=bridge -o com.docker.network.driver.mtu=1500 qnap-ipvlan

# 3. Apakah berhasil
docker network inspect qnap-ipvlan

# 4. Tes dengan container alpine
docker run -it --rm --network=qnap-ipvlan --ip=10.159.2.109 alpine sh -c "ping -c 2 10.159.2.4 && ping -c 2 10.159.2.10"

# 5. Alpine dapat dijangkau
# Dari QNAP sendiri:
curl -I http://10.159.2.109 2>/dev/null || echo "Testing connection"

# 6. status
docker-compose ps
docker network inspect qnap-ipvlan

Dan ini hasil/error yang saya dapatkan:

[/share/Container/docker-compose] # chmod ug+x ./setup_IPvlan_alpine.sh
[/share/Container/docker-compose] # ./setup_IPvlan_alpine.sh
qnap-ipvlan
9f3dbd6a27cfa1812--------636471f5893ba6b38bf15f7b2c
[
    {
        "Name": "qnap-ipvlan",
        "Id": "9f3dbd6a27cfa1812a----3b31636471f5893ba6b38bf15f7b2c",
        "Created": "2026-01-14T22:05:40.655178454+01:00",
        "Scope": "local",
        "Driver": "ipvlan",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "10.159.2.0/24",
                    "IPRange": "10.159.2.96/28",
                    "Gateway": "10.159.2.4"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {
            "com.docker.network.driver.mtu": "1500",
            "ipvlan_flags": "bridge",
            "ipvlan_mode": "l2",
            "parent": "eth1"
        },
        "Labels": {}
    }
]
docker: Error response from daemon: failed to create the ipvlan port: device or resource busy.
Testing connection
WARN[0000] /share/Container/docker-compose/docker-compose.yml: atribut `version` sudah usang, akan diabaikan, silakan hapus untuk menghindari kebingungan
NAME      IMAGE     COMMAND   SERVICE   CREATED   STATUS    PORTS
[
    {
        "Name": "qnap-ipvlan",
        "Id": "9f3dbd6a27cfa1812a36-------893ba6b38bf15f7b2c",
        "Created": "2026-01-14T22:05:40.655178454+01:00",
        "Scope": "local",
        "Driver": "ipvlan",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "10.159.2.0/24",
                    "IPRange": "10.159.2.96/28",
                    "Gateway": "10.159.2.4"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {
            "com.docker.network.driver.mtu": "1500",
            "ipvlan_flags": "bridge",
            "ipvlan_mode": "l2",
            "parent": "eth1"
        },
        "Labels": {}
    }
]

Error utama yang saya temui adalah:
“docker: Error response from daemon: failed to create the ipvlan port: device or resource busy.”

Kenapa error ipvlan “device or resource busy” ini muncul? Bagaimana cara memperbaikinya agar saya bisa melanjutkan setup?

Saran atau masukan apa pun sangat saya hargai

terima kasih sebelumnya!

Apakah ada alasan Anda perlu menggunakan VLAN untuk ini? QNAP secara default menempatkan semua container pada jaringan mereka sendiri…

Terima kasih atas waktunya. Sebenarnya saya ingin membalas lebih cepat, tetapi entah kenapa saya terus mendapatkan ‘gateway time out’ saat mencoba login.

Kedua, ya memang ada alasannya.

Container Station default adalah layanan diekspos melalui pemetaan port (port forwarding).

Namun, alasan saya ingin menggunakan jaringan ipvlan kustom didorong oleh beberapa kebutuhan arsitektural dan operasional: Jaringan ipvlan memungkinkan container memiliki alamat IP khusus yang dapat dirutekan di subnet LAN saya yang sudah ada, tanpa NAT. Ini membuat mereka berperilaku seperti perangkat fisik di jaringan, yang penting untuk komunikasi langsung antar container menggunakan IP tetap. Ini juga memungkinkan perangkat lain di LAN saya mengakses container secara langsung tanpa harus melalui pemetaan port host.

Mode ipvlan L2 memiliki overhead yang lebih rendah dibandingkan bridge Docker default (yang menggunakan NAT dan aturan iptables). Ini juga lebih sederhana untuk kasus saya karena saya tidak perlu dan tidak ingin mengelola banyak pemetaan port dan harus mengingat semuanya saat saya sibuk dengan tujuan penggunaan container.

Menggunakan Docker Compose atau skrip dengan jaringan ipvlan yang sudah didefinisikan membuat pengaturan menjadi terdokumentasi dengan sendirinya dan portabel. Saya bisa menyalin dan mereproduksi konfigurasi jaringan yang persis sama di host Docker lain (tidak harus QNAP) hanya dengan menyesuaikan interface parent.

Selain preferensi dan keinginan saya, ada juga kebutuhan operasional. Saya lebih fokus pada mengapa saya mendapatkan notifikasi ‘port is in use’. Bisakah Anda atau seseorang membantu saya terkait hal itu?

Terima kasih.

Terima kasih atas posting Anda. Saya selalu berasumsi bahwa jaringan tambahan yang dibuat oleh ContainerStation di Network and Virtual Switch adalah jaringan yang benar-benar dapat dirutekan sendiri. Apakah bukan begitu?

Berdasarkan pemahaman saya tentang Container Station, Anda dapat memilih mode jaringan seperti ‘host’, ‘bridge’, dan tipe VLAN (macvlan?).

Anda mungkin lebih paham daripada saya, tetapi saya tidak menemukan cara untuk menetapkan IP statis ke setiap container—tanpa menggunakan port forwarding—sementara mereka tetap bisa berkomunikasi langsung satu sama lain. Saya belum menemukan contoh yang berhasil melakukan hal ini. Ketika saya mencoba menggunakan mode bridge dengan IP statis, proses setup container selalu macet setiap kali saya mencoba memilih folder. Masalah ini, ditambah waktu yang dibutuhkan dan tujuan keseluruhan, membuat saya enggan untuk bereksperimen lebih jauh.

Membuat konfigurasi yang dapat digunakan ulang di Container Station terasa terlalu rumit, terutama jika saya ingin memindahkannya ke QNAP lain atau sistem yang berbeda di kemudian hari. Saya benar-benar membutuhkan solusi yang dapat menerapkan semua pengaturan yang diperlukan dalam satu langkah atau setup.

Pembaruan:

Ngomong-ngomong, saya baru saja menemukan penyebab error-nya. QNAP dikonfigurasi dengan interface virtual, yang memblokir eth1.100 dan vsc0 (atau sesuatu yang mirip). Docker—atau sistemnya sendiri—kemudian default ke eth0.

Saya menyelesaikan sebagian masalah ini dengan menjalankan ip link set eth1 promisc on, yang memungkinkan interface fisik menerima beberapa alamat IP.

Sekarang container dapat saling berkomunikasi, tetapi anehnya, host tidak dapat berkomunikasi dengan container.

Baru saja selesai membuat skrip pengujian. Mungkin ada yang bisa membantu dengan ini.


#!/bin/sh

echo "1. Menghapus container lama"
docker rm -f container-a container-b 2>/dev/null || true
docker network rm qnap-ipvlan-static

echo "=== 1. KONFIGURASI JARINGAN SAAT INI ==="
echo "Alamat IP Eth1:"
ip addr show dev eth1 | grep inet
echo "---"
echo "Status link Eth1:"
ip link show eth1

echo "=== 2. MENGHAPUS JARINGAN LAMA ==="
docker network rm qnap-ipvlan 2>/dev/null || true

echo "=== JARINGAN IPVLAN DENGAN IP STATIS ==="

echo "1. Mengaktifkan mode promiscuous"
ip link set eth1 promisc on

echo "2. Membuat jaringan IPVLAN dengan nama 'qnap-ipvlan-static'"
docker network create -d ipvlan --subnet=10.159.2.0/24 --gateway=10.159.2.4 --ip-range=10.159.2.96/28 -o parent=eth1 -o ipvlan_mode=l2 qnap-ipvlan-static

echo "3. Menjalankan Container A dengan IP statis 10.159.2.101"
docker run -d --name container-a --network=qnap-ipvlan-static --ip=10.159.2.101 alpine sleep 300
sleep 4

echo "4. Menjalankan Container B dengan IP statis 10.159.2.102"
docker run -d --name container-b --network=qnap-ipvlan-static --ip=10.159.2.102 alpine sleep 300
sleep 4

echo "=== 5. PENGUJIAN JARINGAN ==="

echo "Tes 1: Container A ke Container B"
docker exec container-a ping -c 2 10.159.2.102

echo "Tes 2: Container B ke Container A"
docker exec container-b ping -c 2 10.159.2.101

echo "Peringatan ---- ICMP diblokir di FW"
echo "Tes 3: Container A ke Gateway"
docker exec container-a ping -c 2 10.159.2.4

echo "Tes 4: Container B ke Gateway"
docker exec container-b ping -c 2 10.159.2.4

echo "Tes 5: Host ke Container A"
ping -c 2 10.159.2.101

echo "Tes 6: QNAP ke Container B"
ping -c 2 10.159.2.102

echo "=== 6. PENGUJIAN DARI PERANGKAT EKSTERNAL ==="
echo "Jalankan dari perangkat eksternal:"
echo "  ping 10.159.2.101"
echo "  ping 10.159.2.102"

#echo "=== 7. BERSIH-BERSIH ==="

#docker rm -f container-a container-b

#docker network rm qnap-ipvlan-static

Hasil skrip dengan koneksi host ke container yang tidak berfungsi.

[/share/Container/docker-compose] # ./setup3_IPvlan_alpine.sh

1. Menghapus container lama

container-a

container-b

qnap-ipvlan-static

=== 1. KONFIGURASI JARINGAN SAAT INI ===

Alamat IP Eth1:

    inet 10.159.2.10/24 brd 10.159.2.255 scope global eth1

---

Status link Eth1:

3: eth1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000

    link/ether 24:5e:be:6d:3d:05 brd ff:ff:ff:ff:ff:ff

=== 2. MENGHAPUS JARINGAN LAMA ===

=== JARINGAN IPVLAN DENGAN IP STATIS ===

1. Mengaktifkan mode promiscuous

2. Membuat jaringan IPVLAN

068597243bb2b05a185ef754a9eb00f0e06918b60028b01da9d159878e2b68be

3. Menjalankan Container A dengan IP statis 10.159.2.101

afbffd4314f94c1f38fdd992a53761da092d3c037ab63a8d03d3f293e5becbd3

4. Menjalankan Container B dengan IP statis 10.159.2.102

7daaad6cf1b1d2a0f549a41597dfc68a302fc809cd4f4f585101d055580f4076

=== 5. PENGUJIAN JARINGAN ===

Tes 1: Container A ke Container B

PING 10.159.2.102 (10.159.2.102): 56 data bytes

64 bytes from 10.159.2.102: seq=0 ttl=64 time=0.329 ms

64 bytes from 10.159.2.102: seq=1 ttl=64 time=0.076 ms



--- 10.159.2.102 ping statistics ---

2 packets transmitted, 2 packets received, 0% packet loss

round-trip min/avg/max = 0.076/0.202/0.329 ms

Tes 2: Container B ke Container A

PING 10.159.2.101 (10.159.2.101): 56 data bytes

64 bytes from 10.159.2.101: seq=0 ttl=64 time=0.072 ms

64 bytes from 10.159.2.101: seq=1 ttl=64 time=0.070 ms



--- 10.159.2.101 ping statistics ---

2 packets transmitted, 2 packets received, 0% packet loss

round-trip min/avg/max = 0.070/0.071/0.072 ms

ICMP diblokir di FW

Tes 3: Container A ke Gateway

PING 10.159.2.4 (10.159.2.4): 56 data bytes

64 bytes from 10.159.2.4: seq=0 ttl=64 time=0.487 ms

64 bytes from 10.159.2.4: seq=1 ttl=64 time=0.257 ms



--- 10.159.2.4 ping statistics ---

2 packets transmitted, 2 packets received, 0% packet loss

round-trip min/avg/max = 0.257/0.372/0.487 ms

Tes 4: Container B ke Gateway

PING 10.159.2.4 (10.159.2.4): 56 data bytes

64 bytes from 10.159.2.4: seq=0 ttl=64 time=0.417 ms

64 bytes from 10.159.2.4: seq=1 ttl=64 time=0.231 ms



--- 10.159.2.4 ping statistics ---

2 packets transmitted, 2 packets received, 0% packet loss

round-trip min/avg/max = 0.231/0.324/0.417 ms

Tes 5: Host ke Container A

PING 10.159.2.101 (10.159.2.101): 56 data bytes



--- 10.159.2.101 ping statistics ---

2 packets transmitted, 0 packets received, 100% packet loss

Tes 6: QNAP ke Container B

PING 10.159.2.102 (10.159.2.102): 56 data bytes



--- 10.159.2.102 ping statistics ---

2 packets transmitted, 0 packets received, 100% packet loss

=== 6. PENGUJIAN DARI PERANGKAT EKSTERNAL ===

Jalankan dari perangkat eksternal:

  ping 10.159.2.101

  ping 10.159.2.102"

ping 10.159.2.101 dan ping 10.159.2.102 keduanya berfungsi dari perangkat lain.