[英]docker-compose assign lan ip to service
我有三個與 docker-compose 連接的容器,它們都在一個 docker 內部網絡中。 但是我想通過為其分配一個 LAN IP 來公開其中一個容器。
所以,我有 IP 指向的主機:192.168.220.33,我想將 IP 分配給 gitlab 容器:192.168.220.220。
我現在的問題是我收到此錯誤:
錯誤:對於 gitlab 無法啟動服務 gitlab:無效鏈接本地 IP 地址:192.168.220.220
我正在使用 docker-compose 1.11.2 並且我有以下 docker-compose.yml 文件:
version: '2.1'
networks:
front:
driver: bridge
services:
redis:
image: sameersbn/redis:latest
volumes:
- /tmp/gitlab/redis:/var/lib/redis:Z
networks:
- default
...
postgresql:
image: sameersbn/postgresql:latest
volumes:
- /tmp/gitlab/postgresql:/var/lib/postgresql:Z
networks:
- default
...
gitlab:
image: sameersbn/gitlab:latest
depends_on:
- redis
- postgresql
ports:
- "22:22"
- "80:80"
- "443:443"
networks:
default: {}
outside:
link_local_ips:
- 192.168.220.220
...
我也試過這個配置:
version: '2.1'
networks:
front:
driver: bridge
ipam:
config:
- subnet: 192.168.220.0/24
services:
redis:
networks:
- default
...
postgresql:
networks:
- default
...
gitlab:
...
networks:
default: {}
outside:
ipv4_address: 192.168.220.220
此配置可以構建和運行容器,並且所有內容都可以從本地主機訪問,但我無法 ping 到所需的 ip (192.168.220.220)。 既不受主機也不在主機之外。
PING 192.168.220.220 (192.168.220.220):56 個數據字節
icmp_seq 0 的請求超時
ping: sendto: 沒有到主機的路由
icmp_seq 1 的請求超時
ping: sendto: 沒有到主機的路由
icmp_seq 2 的請求超時
ping: sendto: 沒有到主機的路由
icmp_seq 3 的請求超時
ping: sendto: 沒有到主機的路由
我想知道如何為 gitlab 容器分配 IP 以便通過此 IP 而不是主機 IP 和暴露的端口訪問。
更新我希望容器和主機在網絡中處於同一級別,因此兩個 IP 都以:192.168.220.x 開頭
也許我必須使用macvlan或ipvlan ?
預先感謝您的每一個回復!
這是您想要實現的完整工作 docker-compose.yml。
version: '2.1'
networks:
outside:
driver: bridge
ipam:
driver: default
config:
- subnet: 192.168.220.0/24
services:
redis:
image: sameersbn/redis:latest
restart: always
command:
- --loglevel warning
networks:
- default
postgresql:
restart: always
image: sameersbn/postgresql:latest
environment:
- DB_USER=gitlab
- DB_PASS=password
- DB_NAME=gitlabhq_production
- DB_EXTENSION=pg_trgm
networks:
- default
gitlab:
restart: always
image: sameersbn/gitlab:latest
depends_on:
- redis
- postgresql
networks:
default:
outside:
ipv4_address: 192.168.220.220
environment:
- DEBUG=false
- DB_ADAPTER=postgresql
- DB_HOST=postgresql
- DB_PORT=5432
- DB_USER=gitlab
- DB_PASS=password
- DB_NAME=gitlabhq_production
- REDIS_HOST=redis
- REDIS_PORT=6379
- GITLAB_HTTPS=false
- SSL_SELF_SIGNED=false
- GITLAB_HOST=192.168.220.220
- GITLAB_PORT=80
- GITLAB_SSH_PORT=22
- GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alphanumeric-string
- GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alphanumeric-string
- GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alphanumeric-string
- GITLAB_ROOT_PASSWORD=password
- GITLAB_ROOT_EMAIL=
執行docker-compose up
您將能夠訪問容器公開的端口。 盡管如此,通過這些設置,您將無法從外部主機訪問 gitlab docker。
最后我找到了一個適合我的解決方案。
docker-compose.yml
version: '2'
networks:
front:
driver: macvlan
driver_opts:
parent: eth0.10
ipam:
config:
- subnet: 192.168.220.0/24
gateway: 192.168.220.1
services:
redis:
networks:
- default
...
postgresql:
networks:
- default
...
gitlab:
...
networks:
default: {}
outside:
ipv4_address: 192.168.220.220
然后需要用ifconfig設置IP地址:
sudo ifconfig eht0.10 192.168.220.220 netmask 255.255.255.0 up
然后我可以通過調用分配的 IP 來訪問 docker 容器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.