我有三个与docker-compose连接的容器,它们都在docker内部网络中。但我想通过为其分配LAN IP来公开其中一个容器。
所以,我有IP指向的主机:192.168.220.33,我想为gitlab容器分配IP: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
此配置可以构建和运行容器,并且可以从localhost访问所有内容,但我无法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 ?
提前感谢您的回复!
答案 0 :(得分:2)
这是您正在尝试实现的完整工作的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。
答案 1 :(得分:0)
最后,我找到了一个适合我的解决方案。
搬运工-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容器。