【问题标题】:an ansible deploy of an docker image throws port is already allocated已分配 docker 映像的 ansible 部署 throws 端口
【发布时间】:2019-07-30 21:30:37
【问题描述】:

我是 ansible 的新手,正在尝试将我的 docker-compose 文件转换为 ansible.yml。

https://codebabel.com/ci-gitlabci-docker/ 中所述,我将一个虚拟烧瓶应用程序的 docker 映像放入我的 gitlab 存储库中。

我写了一个 docker-decompose.yaml 来运行上面的图像和弹性搜索,它工作正常。

  # Run both the app and Elasticsearch inside Docker containers.
version: '3'

services:
  app:
    image: registry.gitlab.com/bacdef/flaskapp:latest
    restart: on-failure
    ports:
      - 5000:5000
    depends_on:
    - elasticsearch
    links:
    - elasticsearch

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.2.0
    container_name: es01
    environment:
      - node.name=es01
      - cluster.initial_master_nodes=es01
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - esnet

volumes:
  esdata01:
    driver: local

networks:
  esnet:

然后我尝试将相同的 docker-compose.yml 转换为 ansible.yml 如下

---
- hosts: localhost
  tasks:
    - name: "Elasticsearch"
      docker_container:
        name: "es01"
        image: docker.elastic.co/elasticsearch/elasticsearch:7.2.0
        ports:
          - "9200:9200"
        volumes:
          - "sdata01:/usr/share/elasticsearch/data"
        env:
          node.name: es01
          cluster.initial_master_nodes: es01
          cluster.name: docker-cluster
          bootstrap.memory_lock: "true"

    - name: "Launch app container"
      docker_container:
        name: "app"
        image: registry.gitlab.com/bacdef/flaskapp:latest
        ports:
          - "5000:5000"

当我运行上面的 ansible 文件时它失败了

播放 [本地主机]


TASK [收集事实] ****************************************************** ******* 好的:[本地主机]

任务 [弹性搜索] ****************************************************** ********* 更改:[本地主机]

TASK [启动应用容器] ****************************************************** ** 致命:[本地主机]:失败! => {"changed": false, "msg": "错误启动 容器 380e56eb2d9579d407727b031713b056efda14f1a73fd9c88f65349567caa9f9:500 服务器错误:内部服务器错误(\“驱动程序编程失败 端点应用程序上的外部连接 (2020132c9cb503817740c063b1d231e3bb72e56d91a0386edd0cc6d23def992f): 绑定 0.0.0.0:5000 失败:端口已分配\")"}

播放回顾 ****************************************************** ******************* 本地主机:好的=2 更改=1 无法访问=0
失败=1 跳过=0 救出=0 忽略=0

但我确信除了这个 docker 映像之外,没有其他进程正在使用端口 5000。我运行losof -i:5000 并在运行ansible-playbook ansible.yml 之前终止了正在此端口上运行的进程 我找不到进程无法绑定到 5000 的原因。

有人可以分享一些高级建议

【问题讨论】:

    标签: docker docker-compose ansible


    【解决方案1】:

    如果 ansible 告诉您该端口已在使用中,则表示它已在使用中。
    尝试以 root 身份运行 lsof 以查找绑定到您的端口的进程:

    sudo lsof -i -P -n | grep 5000
    

    最后,您还可以检查是否没有容器在此端口上运行(带有基本的docker container ls

    【讨论】:

    • 我在运行 ansible 之前运行了 losof -i:5000 但没有使用 sudo。我可以试试,但我什么都不期待。我会让你知道。我确信没有其他 docker 容器正在运行。我删除了所有其他容器。
    • 我重新启动了机器,它开始正常工作。我真的不知道发生了什么。可能是其他东西正在运行。感谢您的输入。
    猜你喜欢
    • 2022-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多