Docker容器无法解析主机名

时间:2017-07-08 17:22:38

标签: docker docker-compose dockerfile

我正在创建一个docker-compose.yaml文件,该文件必须创建一个pypi本地存储库和一个带有我正在编写的开发应用程序的容器。问题是,尽管我已经创建了自定义网络和指定的主机名,但容器却看不到彼此。

更具体地说,pypi必须正常运行;在我的测试中,我手动运行它,msalembic应该使用本地pypi存储库来加载鸡蛋。但我看不到pypi主持人。

version: '3'
services:
  # Alembic MS
  msalembic:
    build:
      context: .
      dockerfile: AlembicMSDockerfile
    ports:
      - "5432:5432"
    hostname: alembicms
    volumes:
      - "${PWD}/msalembic/postgres/psql_data:/var/lib/postgresql/data"
    environment:
      POSTGRES_USER: ${PGUSER}
      POSTGRES_PASSWORD: ${PGPASSWORD}
      POSTGRES_DB: goodboy
      ENVIRONMENT: ${ENVIRONMENT}
    networks:
      - custom_network
    depends_on:
        - pypi
  # Private internal Pypi repository
  pypi:
    build:
        context: pypi
        dockerfile: Dockerfile
        args:
          HTACCESS: ${HTACCESS}
    hostname: pypi
    volumes:
      - "${PWD}/pypi/:/srv/pypi:rw"
    ports:
      - "9090:80"
    container_name: pypi
    networks:
      - custom_network
networks:
  custom_network:

AlembicMSDockerfile的内容:

FROM python:3.6
MAINTAINER Bruno Ripa <XXX>
#RUN pip install -f http://pypi:9090 --trusted-host pypi alembicms
RUN ping pypi
ENTRYPOINT ["alembicms"]

当然,我可以在本地pypi存储库中浏览和发布包。

感谢。

1 个答案:

答案 0 :(得分:0)

您指定的端口映射仅在容器的端口暴露给主机网络时才相关(例如,如果您想通过http://localhost:9090从主机访问它们)。

在docker网络中链接容器时,服务会在Dockerfile中定义的端口上公开。因此,根据您的端口映射,pypi容器公开了端口80,当您想从同一个docker网络中的另一个容器访问它时,您也应该使用它。

因此,当您运行AlembicMSDockerfile的构建映像时,您可以通过docker network访问端口80上的pypi容器。在您的特殊情况下,您希望在alembic ms映像的构建期间访问pypi容器。目前在docker-compose中不支持此功能,因为您可以从the issues here读取。

只要没有发布,你就可以自己运行pypi容器并使用docker build --net=host --add-host=pypi_on_host:<yourhostip> --file=AlembicMSDockerfile然后修改RUN命令以使用http://pypi_on_host:9090(你需要映射端口的地方,因为您不再使用docker内部网络访问它)。不是很优雅,但至少在Dockerfile中没有直接引用你的主机IP ...