我有三个与 docker-compose 连接的容器,它们都在一个 docker 内部网络中。但是我想通过为其分配一个 LAN IP 来公开其中一个容器。
所以,我有 IP 指向的主机:192.168.220.33,我想将 IP 分配给 gitlab 容器:192.168.220.220。
我现在的问题是我收到此错误:
ERROR: for gitlab Cannot start service gitlab: invalid link local IP address: 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 data bytes
Request timeout for icmp_seq 0
ping: sendto: No route to host
Request timeout for icmp_seq 1
ping: sendto: No route to host
Request timeout for icmp_seq 2
ping: sendto: No route to host
Request timeout for icmp_seq 3
ping: sendto: No route to host
我想知道如何为 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。