Jas*_*son 4 django amazon-web-services docker amazon-elastic-beanstalk docker-compose
我一直在尝试部署由 Django、Postgresql 和 Nginx 组成的 docker。当我这样做时效果很好
sudo docker-compose up但是,当将其部署在 AWS EB 上时,它给了我
无法将主机名“db”转换为地址:名称或服务未知
我所做的是将我的 docker 推送到 docker hub 使用
sudo docker build -t myname/dockername -f Dockerfile 。我只是这样做
电子部署
文件结构
myproject
myproject
settings.py
urls.py
...
Dockerfile
Dockerrun.aws.json
manage.py
requirements.txt
...
Run Code Online (Sandbox Code Playgroud)
Dockerfile
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
EXPOSE 8000
CMD ["sh", "on-container-start.sh"]
Run Code Online (Sandbox Code Playgroud)
Dockerrun.aws.json
{
"AWSEBDockerrunVersion": "1",
"Image": {
"Name": "myname/dockername:latest",
"Update": "true"
},
"Ports": [
{
"ContainerPort": "8000"
}
]
}
Run Code Online (Sandbox Code Playgroud)
docker-compose.yml
version: '3'
services:
db:
image: postgres
hostname: db
networks:
- some_network
web:
restart: always
build: .
volumes:
- .:/code
hostname: web
expose:
- "8000"
depends_on:
- db
links:
- db:db
networks:
- some_network
nginx:
image: nginx
hostname: nginx
ports:
- "8000:8000"
volumes:
- ./config/nginx:/etc/nginx/conf.d
depends_on:
- web
networks:
- some_network
networks:
some_network:
Run Code Online (Sandbox Code Playgroud)
我意识到的一件事是,当我在我的机器上使用 docker-compose up 时,我会运行 3 个不同的容器。然而在 EB 上,我看到只有一个容器在运行。
我认为这是因为我从 docker hub 获取了我用这些文件构建的图像,并且以某种方式导致这 3 个容器成为一个容器,并且它在识别主机名方面造成了混乱?我还是不太确定。非常感谢您的帮助。谢谢!
Dockerrun.aws.json应该与docker-compose.yml主机名 \xe2\x80\x9ddb\xe2\x80\x9c 无法转换为地址的问题原因docker-compose.yml是Dockerrun.aws.json了不同的体系结构:
docker-compose.ymlDockerrun.aws.json因此,应用程序尝试解析db主机名但无法找到它,因为db未在中声明Dockerrun.aws.json
Dockerrun.aws.json所以,更新你的Dockerrun.aws.json. 您可以手动或使用方便的工具micahhausler/container-transform来完成来完成此操作:
您可以使用示例,例如:
\nmicahhausler/container-transform你可以尝试micahhausler/container-transform:
\n\n\n转换 docker-compose、ECS 和 Marathon 配置\n转换 docker-compose、ECS 和 Marathon 配置
\n
以下是它针对您的情况输出的内容:
\n$ container-transform docker-compose.yml > Dockerrun.aws.json\nRun Code Online (Sandbox Code Playgroud)\nDockerrun.aws.json
\n{\n "containerDefinitions": [\n {\n "essential": true,\n "image": "postgres",\n "name": "db"\n },\n {\n "essential": true,\n "image": "nginx",\n "mountPoints": [\n {\n "containerPath": "/etc/nginx/conf.d",\n "sourceVolume": "_ConfigNginx"\n }\n ],\n "name": "nginx",\n "portMappings": [\n {\n "containerPort": 8000,\n "hostPort": 8000\n }\n ]\n },\n {\n "essential": true,\n "links": [\n "db:db"\n ],\n "mountPoints": [\n {\n "containerPath": "/code",\n "sourceVolume": "_"\n }\n ],\n "name": "web"\n }\n ],\n "family": "",\n "volumes": [\n {\n "host": {\n "sourcePath": "."\n },\n "name": "_"\n },\n {\n "host": {\n "sourcePath": "./config/nginx"\n },\n "name": "_ConfigNginx"\n }\n ]\n}\nRun Code Online (Sandbox Code Playgroud)\n注意::当然,您应该修复丢失的设置,例如memoryfordb和nginxContainers。
networks完全可以省略\n\n例如,假设您的应用程序位于名为 的目录中
\nmyapp,并且您的docker-compose.yml应用程序如下所示:
docker-compose.yml
\nversion: "3"\nservices:\n web:\n build: .\n ports:\n - "8000:8000"\n db:\n image: postgres\n ports:\n - "8001:5432"\n\nRun Code Online (Sandbox Code Playgroud)\n\n\n当您运行时
\ndocker-compose up,会发生以下情况:\n
\n- \n
myapp_default创建了一个名为的网络。- 使用 \xe2\x80\x99s 配置创建容器
\nweb。myapp_default它以 的名义加入网络web。- 使用 \xe2\x80\x99s 配置创建容器
\ndb。myapp_default它以 的名义加入网络db。
因此,由于所有容器都链接到同一个some_network,因此您可以省略它。
docker-compose.yml
\nversion: \'3\'\n\nservices:\n db:\n image: postgres\n hostname: db\n web:\n restart: always\n build: .\n volumes:\n - .:/code\n hostname: web\n expose:\n - "8000"\n depends_on:\n - db\n links:\n - db:db\n nginx:\n image: nginx\n hostname: nginx\n ports:\n - "8000:8000"\n volumes:\n - ./config/nginx:/etc/nginx/conf.d\n depends_on:\n - web\nRun Code Online (Sandbox Code Playgroud)\n并将$ container-transform docker-compose.yml > Dockerrun.aws.json产生:
Dockerrun.aws.json
\n{\n "containerDefinitions": [\n {\n "essential": true,\n "image": "postgres",\n "name": "db"\n },\n {\n "essential": true,\n "image": "nginx",\n "mountPoints": [\n {\n "containerPath": "/etc/nginx/conf.d",\n "sourceVolume": "_ConfigNginx"\n }\n ],\n "name": "nginx",\n "portMappings": [\n {\n "containerPort": 8000,\n "hostPort": 8000\n }\n ]\n },\n {\n "essential": true,\n "links": [\n "db:db"\n ],\n "mountPoints": [\n {\n "containerPath": "/code",\n "sourceVolume": "_"\n }\n ],\n "name": "web"\n }\n ],\n "family": "",\n "volumes": [\n {\n "host": {\n "sourcePath": "."\n },\n "name": "_"\n },\n {\n "host": {\n "sourcePath": "./config/nginx"\n },\n "name": "_ConfigNginx"\n }\n ]\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1508 次 |
| 最近记录: |