我已经按照Docker站点上的Django Quick Start说明严格设置了Docker Django/PostgreSQL应用程序.
我第一次运行Django的manage.py migrate,使用该命令sudo docker-compose run web python manage.py migrate,它按预期工作.数据库是在Docker PostgreSQL容器内构建的.
Django应用程序本身的更改同样反映在Docker Django容器中,我保存它们的那一刻.这很棒!
但是如果我然后在Django中更改模型,并尝试更新Postgres数据库以匹配模型,则不会检测到任何更改,因此无论我运行多少次makemigrations或migrate再次运行都不会发生迁移.
基本上,每次我更改Django模型时,我都必须删除Docker容器(使用sudo docker-compose rm)并重新启动新的迁移.
我仍然试图让我的头围绕Docker,并且有很多我不明白它是如何工作的,但是这个让我疯狂.为什么不迁移看到我的更改?我究竟做错了什么?
我在windows 10 pro上安装了docker.我在git-bash中运行以下命令时遇到了问题.
docker-compose up -d --build
并得到以下错误.
E: gnupg, gnupg2 and gnupg1 do not seem to be installed, but one of them is required for this operation
(23) Failed writing body
Error executing command, exiting
ERROR: Service 'web' failed to build: The command '/bin/sh -c curl -sL https://deb.nodesource.com/setup_8.x | bash' returned a non-zero code: 1
Run Code Online (Sandbox Code Playgroud)
任何帮助深表感谢.提前致谢.
使用Compose,如果我运行docker-compose build,它将重建所有容器:
> docker-compose build
Building elasticsearch
Step 1 : FROM elasticsearch:2.1
---> a05cc7ed3f32
Step 2 : RUN /usr/share/elasticsearch/bin/plugin install analysis-phonetic
---> Using cache
---> ec07bbdb8a18
Successfully built ec07bbdb8a18
Building search
Step 1 : FROM php:5.5.28-fpm
---> fcd24d1058c0
...
Run Code Online (Sandbox Code Playgroud)
即使使用缓存进行重建,也需要时间.所以我的问题是:
有没有办法只重建一个特定的容器?
我正在尝试让 Flask 和 Docker 应用程序正常工作,但是当我尝试docker-compose up在 Visual Studio 终端中使用命令运行它时,它给了我一个名为ImportError: cannot import name 'json' from itsdangerous. 我试图寻找解决这个问题的可能解决方案,但到目前为止,这里或其他地方的解决方案并不多。我能找到的唯一两个解决方案是将 MarkupSafe 及其危险的当前安装更改为更高版本:https://serverfault.com/questions/1094062/from-itsdangerous-import-json-as-json-importerror-cannot- import-name-json-fr和 GitHub 上的另一个告诉我从本质上再次更改 MarkUpSafe 及其危险的安装https://github.com/aws/aws-sam-cli/issues/3661,我也尝试过命名为安装软件包的虚拟环境veganetworkscriptenv,但也失败了。我目前使用 Flask 2.0.0 和 Docker 5.0.0,错误发生在 vegamain.py 的第八行。
这是我尝试运行该程序时收到的完整导入错误:
veganetworkscript-backend-1 | Traceback (most recent call last):
veganetworkscript-backend-1 | File "/app/vegamain.py", line 8, in <module>
veganetworkscript-backend-1 | from flask import Flask
veganetworkscript-backend-1 | File "/usr/local/lib/python3.9/site-packages/flask/__init__.py", line 19, in <module>
veganetworkscript-backend-1 | from . import json
veganetworkscript-backend-1 | File "/usr/local/lib/python3.9/site-packages/flask/json/__init__.py", …Run Code Online (Sandbox Code Playgroud) 当我使用时,docker-compose up我可以在我的docker-compose.yml文件中看到所有容器的日志.
但是,当我使用时,docker-compose run app我只看到控制台输出,app但没有任何app依赖的服务.如何查看其他服务的日志输出?
我正在使用docker-compose和v3.我正在尝试在docker中安装一个卷:
./appdata:/appdata
我希望将其作为卷,然后从多个容器引用该卷.的卷配置参考仅示出了data-volume:作为命名体积,用没有值,因此它不会像以上.
services:
nginx:
build: ./nginx/
ports:
- 80:80
links:
- php
volumes:
- app-volume
php:
build: ./php/
expose:
- 9000
volumes:
- app-volume
volumes:
app-volume: ./appdata:/appdata
Run Code Online (Sandbox Code Playgroud)
这给了我:
错误:在文件'./docker-compose.yml'中,卷'app-volume'必须是映射而不是字符串.
显然我知道我需要更改volumes键/值对,但我不知道如何更改它以便我可以在服务之间共享卷.
我也检查过,volumes_from但这实际上只允许从其他容器继承.我看到有人volumes_from在另一个包含他们想要的映射的容器上使用,但是command: true设置为容器从未实际运行,这对我来说就像是一个黑客.
我怎样才能做到这一点?
注意,我确实有以下工作:
nginx:
volumes:
- ./appdata:/appdata
php:
volumes:
- ./appdata:/appdata
Run Code Online (Sandbox Code Playgroud)
但这只是重复而且是我希望命名卷可以帮助我避免:-)
Docker 1.9允许将参数传递给dockerfile.请参阅链接:https://docs.docker.com/engine/reference/builder/#arg
如何在docker-compose.yml中传递相同的参数?
如果可能的话,请提供一个例子.
我在Amazon EC2上运行docker-container.目前,我已将AWS Credentials添加到Dockerfile.你能告诉我最好的办法吗?
我正在尝试为容器提供静态IP地址.我知道我必须创建一个自定义网络.我创建它,并且主机上的桥接接口(Ubuntu 16.x).容器从此子网获取IP,但不是我提供的静态IP.
这是我的docker-compose.yml:
version: '2'
services:
mysql:
container_name: mysql
image: mysql:latest
restart: always
environment:
- MYSQL_ROOT_PASSWORD=root
ports:
- "3306:3306"
networks:
- vpcbr
apigw-tomcat:
container_name: apigw-tomcat
build: tomcat/.
ports:
- "8080:8080"
- "8009:8009"
networks:
- vpcbr
depends_on:
- mysql
networks:
vpcbr:
driver: bridge
ipam:
config:
- subnet: 10.5.0.0/16
gateway: 10.5.0.1
aux_addresses:
mysql: 10.5.0.5
apigw-tomcat: 10.5.0.6
Run Code Online (Sandbox Code Playgroud)
容器得到10.5.0.2和10.5.0.3,而不是5和6.
我在使用docker-compose通过远程python解释器运行pycharm时遇到了一些问题.一切都很好,除了Python控制台,当我按下运行按钮时它只显示以下消息:
"错误:无法从docker-compose输出中找到服务"web"的容器名称"
我真的不明白为什么它让我表明,如果我docker-compose.yml提供web服务.
有帮助吗?
编辑:
泊坞窗,compose.yml
version: '2'
volumes:
dados:
driver: local
media:
driver: local
static:
driver: local
services:
beat:
build: Docker/beat
depends_on:
- web
- worker
restart: always
volumes:
- ./src:/app/src
db:
build: Docker/postgres
ports:
- 5433:5432
restart: always
volumes:
- dados:/var/lib/postgresql/data
jupyter:
build: Docker/jupyter
command: jupyter notebook
depends_on:
- web
ports:
- 8888:8888
volumes:
- ./src:/app/src
python:
build:
context: Docker/python
args:
REQUIREMENTS_ENV: 'dev'
image: helpdesk/python:3.6
redis:
image: redis:3.2.6
ports:
- 6379:6379
restart: always
web: …Run Code Online (Sandbox Code Playgroud)