我正在创建一个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存储库中浏览和发布包。
感谢。
答案 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 ...