2017-03-04 78 views
2

我有三个与docker-compose相连的容器,所有这些都连接在一个docker内部网络中。但我想通过给它分配一个局域网IP来暴露其中一个容器。docker-compose将lan ip分配给服务

所以,我有IP指向的主机:192.168.220.33,我想分配给gitlab容器IP:192.168.220.220。

现在我的问题是,我收到此错误:

ERROR: for gitlab Cannot start service gitlab: invalid link local IP address: 192.168.220.220

我使用泊坞窗,撰写1.11.2和我有以下几个搬运工,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

也许我不得不使用macvlanipvlan

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

回答

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。

1

这是一个完整的工作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泊坞窗。

+0

谢谢你的回应尼古拉斯!我认为这个设置是正确的,当主机和容器有不同的IP时,我的意思是它们不共享192.168.220.X.在我的情况下,我希望主机和容器都处于网络中的同一级别,而不是主机子网中的容器。 – cdalvaro