Docker compose, menjalankan container di net: host

104

Saya ingin menelurkan 3 layanan di "host" net menggunakan docker-compose. Ini adalah file docker-compose.yml saya:

version: '2'
services:
  mysql:
    image: mysql
    net: "host"
  nginx:
    image: nginx
    net: "host"
  app:
    image: tomcat
    net: "host"

Saya mendapat kesalahan berikut:

$ docker-compose up
[31mERROR[0m: Validation failed in file '.\docker-compose.yml', reason(s):
Unsupported config option for services.app: 'net'
Unsupported config option for services.mysql: 'net'
Unsupported config option for services.nginx: 'net'

Saya menggunakan boot2docker di windows.

Docker, dan versi tulis Docker:

$ docker -v
Docker version 1.10.2, build c3959b1
$ docker-compose -version
docker-compose version 1.6.0, build cdb920a

Jika saya menjalankan semua layanan secara manual dengan menggunakan docker run --net = "host"semuanya berfungsi dengan baik.

Dalam dokumentasi saya membaca bahwa perintah net didukung di docker-compose :

bersih

Mode jaringan. Gunakan nilai yang sama dengan parameter docker client --net.

net: "jembatan"

bersih: "tidak ada"

net: "container: [nama atau id]"

net: "host"

https://docs.docker.com/v1.6/compose/yml/#net

Apa yang saya lakukan salah?

Benoit Wickramarachi
sumber
Update berdasarkan jawaban @ andy-shinn, parameternya dipanggil network_mode: "host". Seperti yang didokumentasikan di buruh pelabuhan, buat versi 3 #network_mode .
Paul Rougieux

Jawaban:

105

Dokumen-dokumen itu sudah ketinggalan zaman. Saya menduga 1.6 di URL adalah untuk Docker 1.6, bukan Compose 1.6. Lihat sintaks yang benar di sini: https://docs.docker.com/compose/compose-file/#network_mode . Anda cari network_modesaat menggunakan format YAML v2.

Andy Shinn
sumber
Itu benar-benar membingungkan ... Saya akan segera menandai tautan dokumentasi. network_mode berfungsi dengan baik, terima kasih!
Benoit Wickramarachi
Seperti yang saya pahami, saya harus menggunakan network_mode: "host" dalam layanan?
Taras Vaskiv
27
perhatikan bahwa network_mode: hosttidak akan berfungsi pada buruh pelabuhan untuk Mac
arviman
1
@FlavienVolken di mac, salah satu solusinya adalah menggunakan IP host secara eksplisit. Ada beberapa nama host khusus yang dapat Anda gunakan yang menunjuk ke ini (docker_host_domain atau semacamnya, saya lupa).
oooyaya
73

Cetak saja

network_mode: "host"

Andrey
sumber
'network_mode' dan 'networks' tidak dapat digabungkan. Jika Anda sudah memiliki jaringan - itu tidak akan berfungsi.
Alex Efimov
1
network_mode: hosttidak akan berfungsi pada buruh pelabuhan untuk Mac
Vallie
34

Anda dapat mencoba menambahkan

network_mode: "host"

contoh:

version: '2'
services:
  feedx:
    build: web
    ports:
    - "127.0.0.1:8000:8000"
    network_mode: "host"

opsi daftar tersedia

network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"

https://docs.docker.com/compose/compose-file/#network_mode

Sarath Ak
sumber
apakah penerusan port diabaikan dalam kasus ini?
toing_toing
3

Mungkin saya menjawab sangat terlambat. Tapi saya juga mengalami masalah saat mengkonfigurasi jaringan host di docker compose. Kemudian saya membaca dokumentasi secara menyeluruh dan melakukan perubahan dan berhasil. Harap dicatat konfigurasi ini untuk versi tulis-galangan "3.7". Di sini einwohner_net dan elk_net_net adalah jaringan yang ditentukan pengguna yang diperlukan untuk aplikasi saya. Saya menggunakan jaringan host untuk mendapatkan beberapa metrik sistem.

Tautan ke Dokumentasi https://docs.docker.com/compose/compose-file/#host-or-none

version: '3.7'
services:
  app:
    image: ramansharma/einwohnertomcat:v0.0.1
    deploy:
      replicas: 1
      ports:
       - '8080:8080'
    volumes:
     - type: bind
       source: /proc
       target: /hostfs/proc
       read_only: true
     - type: bind
       source: /sys/fs/cgroup
       target: /hostfs/sys/fs/cgroup
       read_only: true
     - type: bind
       source: /
       target: /hostfs
       read_only: true
    networks:
     hostnet: {}
    networks:
     - einwohner_net
     - elk_elk_net
networks:
 einwohner_net:
 elk_elk_net:
   external: true
 hostnet:
   external: true
   name: host
Raman Sharma
sumber
2
> Hanya digunakan jika Anda menggunakan perintah tumpukan buruh pelabuhan. Jika Anda menggunakan perintah docker-compose, gunakan network_mode sebagai gantinya.
thisismydesign
-8

hapus opsi config warn untuk services.app: 'net', itu akan bekerja.

Jerome
sumber