簡體   English   中英

docker-compose 將 lan ip 分配給服務

[英]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 開頭

也許我必須使用macvlanipvlan

預先感謝您的每一個回復!

這是您想要實現的完整工作 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM