docker-compose 为服务分配 lan ip

Car*_*aro 6 networking lan docker-compose

我有三个与 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
        ...
Run Code Online (Sandbox Code Playgroud)

我也尝试过这个配置:

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
Run Code Online (Sandbox Code Playgroud)

此配置可以构建并运行容器,并且可以从 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 开头

也许我必须使用macvlanipvlan

预先感谢您的每一个回复!

Car*_*aro 3

最后我找到了一个适合我的解决方案。

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
Run Code Online (Sandbox Code Playgroud)

然后需要使用ifconfig设置IP地址:

sudo ifconfig eht0.10 192.168.220.220 netmask 255.255.255.0 up
Run Code Online (Sandbox Code Playgroud)

然后我可以通过调用分配的IP来访问docker容器。