2016-10-05 14 views
18

Docker-compose konteynerlerinden harici ağa ulaşamıyorum. Ben harici IP'leri veya Internet IP'leri (ping www.google.com) ulaşmak için yönetmek basit docker run -it nginx bash kullanmadocker-compose hizmetinde internet yok

version: '2' 
services: 
    nginx: 
     image: nginx 

:

aşağıdaki liman işçisi-oluşturma dosyası düşünün.

Diğer taraftan, docker-compose'u kullanıp kapsayıcıya eklerseniz, dış IP adreslerine/DNS'ye ulaşamıyorum.

liman işçisi bilgi:

Containers: 0 
Running: 0 
Paused: 0 
Stopped: 0 
Images: 1 
Server Version: 1.12.1 
Storage Driver: aufs 
Root Dir: /var/lib/docker/aufs 
Backing Filesystem: extfs 
Dirs: 7 
Dirperm1 Supported: true 
Logging Driver: json-file 
Cgroup Driver: cgroupfs 
Plugins: 
Volume: local 
Network: bridge null host overlay 
Swarm: inactive 
Runtimes: runc 
Default Runtime: runc 
Security Options: apparmor seccomp 
Kernel Version: 4.4.0-38-generic 
Operating System: Ubuntu 16.04.1 LTS 
OSType: linux 
Architecture: x86_64 
CPUs: 2 
Total Memory: 3.859 GiB 
Name: *** 
ID: **** 
Docker Root Dir: /var/lib/docker 
Debug Mode (client): false 
Debug Mode (server): false 
Registry: https://index.docker.io/v1/ 
WARNING: No swap limit support 
WARNING: bridge-nf-call-iptables is disabled 
WARNING: bridge-nf-call-ip6tables is disabled 
Insecure Registries: 
127.0.0.0/8 

liman işçisi-oluşturma 1.8.1, 878cff1

daemon.json dosyasını oluşturmak:

{ 
    "iptables" : false, 
    "dns" : ["8.8.8.8","8.8.4.4"] 
} 
+0

Docker exec -it ping google.com' kullanıyor musunuz? Bu işe yaramalı. – Alkaline

+0

Tam olarak ne yaptım –

+1

Ağlara baktınız mı? _docker ağı bridge_'ın ne olduğunu inceliyor? 'Köprü' varsayılarak varsayılan ağdır. – aholbreich

cevap

-2

Docker konteynerler varsayılan olarak internete erişim yeteneği vardır. docker container can only access internet with net host

Ya da sadece ev sahibi modunda kabı alalım::

version: '2' 
service: 
    nginx: 
    image: nginx 
    network_mode: host 

Ama @peedee yorumum belirttiği gibi, bu çözüm konak arasındaki ağ ayrımı kayıp olacaktır İşte geçen hafta problemi nasıl çözdüğünü olduğunu ve kaplar.

+0

Bunu yaparak, ana makine ve kap arasındaki tüm ayrımı kaybedersiniz. – peedee

+0

@peedee Evet, bunu itiraf etmeliyim. [Faas] (get-faas.com) projesi için compose dosyasını kontrol ettim, sadece bindirme ağını kullanıyor ve internete erişebilmeli gibi görünüyor. Ama bunu bilgisayarımda yapamadım. –

+2

Docker belgelerinden: "Not: --network =" host ", kapsayıcıya D-bus gibi yerel sistem hizmetlerine tam erişim sağlar ve bu nedenle güvensiz kabul edilir." – kewne

1

REINIT Çekmekte olduğunuz görüntü ping varsayılan olarak yüklenmemiş. Bağlantınızı test etmek için gerçekten ping kullanıyorsanız, önce onu yüklemelisiniz.

FROM nginx:latest 
RUN apt update && apt -y install iputils-ping 

Sonra yerel olarak inşa edilmiş ve mynginx olarak etiketlenmiş:

Ben Dockerfile yüklü olması özel bir yarattı.

Sonra özel resim mynginx kullanmak docker-compose.yml değiştirdi:

version: '2' 
services: 
    nginx: 
    image: mynginx 

Son olarak, docker-compose up ateş ve içine bir liman işçisi exec yaptı ve ping test etti. Hepsi iyi çalıştı. Ayrıca docker run -ti ... yaptım ve çalıştı.

Sorunuzda sorun nedir? docker run, docker-compose up tarafından oluşturulandan farklı bir davranışı size nasıl bir kapsayıcı verebilir.

İnternet erişimini nasıl kontrol ettiğinizle ilgili daha fazla açıklık yararlı olacaktır.