Docker容器无法parsing主机名

我正在创build一个docker-compose.yaml文件,该文件必须创build一个pypi本地存储库和一个包含我正在编写的开发应用程序的容器。 问题是,尽pipe我已经创build了自定义networking和指定的主机名,但是容器却看不到对方。

更具体地说,pypi必须启动并运行; 在我的testing中,我手动运行它,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存储库中浏览和发布软件包。

谢谢。

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

当连接Dockerfilenetworking中的容器时,服务将显示在Dockerfile定义的端口上。 因此,根据您的端口映射, pypi容器将显示端口80,当您想从同一个dockernetworking中的另一个容器访问端口时,也应该使用端口80。

因此,当您运行AlembicMSDockerfile的内置映像时,您可以通过dockernetworking访问端口80上的pypi容器。 在你的特殊情况下,你想在alembic ms镜像的编译时间内访问pypi容器。 目前在Docker-compose中不支持,因为您可以从这里的问题阅读。

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