2016-10-05 47 views
18

我無法通過docker-compose容器訪問外部網絡。docker-compose服務器內部沒有互聯網

考慮以下泊塢窗,撰寫文件:

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

使用簡單docker run -it nginx bash我設法到達外部IP地址或IP地址上網(ping www.google.com)。

另一方面,如果我使用docker-compose並將其附加到容器,我無法訪問外部IP地址/ DNS。

泊塢窗信息:

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 

泊塢窗,撰寫1.8.1,建立878cff1

daemon.json文件:

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

您是否使用docker exec -it ping google.com'? 這應該工作。 – Alkaline

+0

這正是我所做的 –

+1

你看過網絡嗎?什麼是_docker網絡檢查bridge_顯示?假設'橋'是默認網絡。 – aholbreich

回答

-2

Docker容器在默認情況下訪問互聯網的能力。 這裏是我上週解決了這個問題:docker container can only access internet with net host

,或者你只是讓主機模式的容器:

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

但作爲@peedee在評論中指出,該解決方案將失去主機之間的網絡隔離和容器。

+0

通過這樣做,您將失去主機和容器之間的所有分隔。 – peedee

+0

@peedee是的,我必須承認這一點。我檢查了[faas](get-faas.com)項目的撰寫文件,它只是使用覆蓋網絡,似乎應該可以訪問互聯網。但是我不能在我的電腦上這樣做。 –

+2

從Docker文檔:「注意:--network =」host「給容器提供對D-bus等本地系統服務的完全訪問權限,因此被認爲是不安全的。」 – kewne

1

您正在拉動的圖像nginx沒有默認安裝ping。所以如果你真的使用ping來測試你的連接,你必須先安裝它。

我創建了一個自定義的Dockerfile把它安裝:

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

然後我建立在本地和標記爲mynginx

然後,我改變docker-compose.yml使用的自定義圖像mynginx

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

最後,我解僱docker-compose up,並做了一個碼頭工人EXEC進去,測試平。所有的工作都很好。我也做了docker run -ti ...,它工作。

在你的問題上出現什麼問題就是docker run可以給你一個不同於如果由docker-compose up創建的行爲的容器。

更清晰地說明如何檢查互聯網訪問將會很有幫助。