Dr *_*ang 1 docker docker-compose visual-studio-2017
我在Visual Studio 2017(工具版本0.41)中使用docker-compose 来构建两个图像,一个ASP.NET Core API容器和一个PostgreSQL容器.我运行了Docker-Compose项目,一切正常 - 我可以从Api容器访问数据库.
我现在想要更改PostgreSQL环境变量POSTGRES_USER,POSTGRES_PASSWORD并POSTGRES_DB改为如下所示的新值:
泊坞窗,compose.yml:
services:
mcodatabase:
image: mcodatabase
build:
context: ./Data
dockerfile: Dockerfile
restart: always
ports:
- 5432:5432
environment:
POSTGRES_USER: mcodevuser
POSTGRES_PASSWORD: password
POSTGRES_DB: mcodev
volumes:
- postgresdata:/var/lib/postgresql/data
networks:
- mconetwork
mcoapi:
image: mcoapi
build:
context: ./Mco.Api
dockerfile: Dockerfile
ports:
- 56107:80
links:
- mcodatabase
depends_on:
- "mcodatabase"
networks:
- mconetwork
volumes:
postgresdata:
networks:
mconetwork:
driver: bridge
Run Code Online (Sandbox Code Playgroud)
但是,据我所知,图像已经创建.我想再次开始使用数据库映像mcodatabase.
这是我的图片:
c:\Projects\v4>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mcodatabase dev 96c9ba7509ed 2 hours ago 267 MB
mcoapi dev f238b18ab9bb 26 hours ago 288 MB
microsoft/aspnetcore 1.1 b186ab38f718 8 days ago 288 MB
postgres latest ff0943ecbb3c 13 days ago 267 MB
d4w/nsenter latest 9e4f13a0901e 7 months ago 83.8 kB
Run Code Online (Sandbox Code Playgroud)
有没有办法用这个工具做到这一点?
如果没有,是否有任何问题只是使用删除图像>docker rmi mcodatabase:dev.当我下次构建时,docker-compose会理解它没有那个图像并重新构建它吗?
小智 6
首先,容器工具1.0(以前称为Docker Tools)是在VS 2017中构建的.您不需要安装0.41.事实上,0.41仅支持VS 2015.即使可能,请不要在VS 2017上安装0.41.
Visual Studio Docker Tools如何从头开始强制容器重建
在Visual Studio中对docker-compose.dcproj运行'clean'将为您进行docker-compose.如果要重建映像,请切换到"Release"配置并对docker-compose.dcproj运行"rebuild".
还有一个命令行解决方案。
要刷新 PostgreSQL 数据库环境变量,您需要删除数据库容器及其卷。当 Visual Studio 下次运行 docker-compose 项目时,它将使用 PostGres 的新“安装”和更新的环境变量重新创建数据库容器及其关联的卷。您将丢失数据,因此请先备份!
这是起点,两个容器:一个用于 ASP.NET Core 容器 ( mcoapi),另一个用于数据库 ( mcodatabase)。Mco是我们公司的缩写。\v4是我的 Visual Studio 解决方案的根,但这些命令可以从任何地方运行,因为我们没有使用 docker-compose 命令行(请参阅下面的原因)。
C:\Projects\v4>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
809b90e22290 mcoapi:dev "tail -f /dev/null" About an hour ago Up About an hour 0.0.0.0:32776->80/tcp, 0.0.0.0:56107->80/tcp dockercompose320715364_mcoapi_1
86d9036daccf mcodatabase:dev "docker-entrypoint..." About an hour ago Up About an hour 0.0.0.0:5432->5432/tcp dockercompose320715364_mcodatabase_1
Run Code Online (Sandbox Code Playgroud)
首先,我停止容器。我使用 the 的前两位数字CONTAINER_ID作为速记。
C:\Projects\v4>docker stop 80
C:\Projects\v4>docker stop 86
Run Code Online (Sandbox Code Playgroud)
现在我移除容器。我需要删除两者,因为我相信它们都使用相同的 docker 卷。
C:\Projects\v4>docker rm 80
C:\Projects\v4>docker rm 86
Run Code Online (Sandbox Code Playgroud)
我现在没有容器。
C:\Projects\v4>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Run Code Online (Sandbox Code Playgroud)
我现在可以删除存储数据库的卷。
在您这样做之前,请备份您需要的任何数据,这将清除数据库!
接下来,我检查已安装的卷:
C:\Projects\v4>docker volume ls
DRIVER VOLUME NAME
local dockercompose320715364_postgresdata
Run Code Online (Sandbox Code Playgroud)
我现在可以通过使用删除它>docker volume rm dockercompose320715364_postgresdata但我更喜欢volume prune,它删除不再使用的卷。如果我忘记取出容器,我很快就会知道。给予y警告。
C:\Projects\v4>docker volume prune
WARNING! This will remove all volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
dockercompose320715364_postgresdata
Total reclaimed space: 45.95 MB
Run Code Online (Sandbox Code Playgroud)
我们现在可以更改docker-compose.yml. 我在下面更改的只是environment:.
version: '2'
services:
mcodatabase:
image: mcodatabase
build:
context: ./Data
dockerfile: Dockerfile
restart: always
ports:
- 5432:5432
environment:
POSTGRES_USER: myNewUser
POSTGRES_PASSWORD: myNewPassword
POSTGRES_DB: myNewDb
volumes:
- postgresdata:/var/lib/postgresql/data
networks:
- mconetwork
[snip for brevity]
Run Code Online (Sandbox Code Playgroud)
我现在在 Visual Studio 中运行 docker-compose 项目,并使用新值重新创建数据库容器。
可以docker-compose down在命令行上使用类似的命令来执行类似的拆卸,但我发现命令行更复杂,因为它包含ymlVisual Studio 需要的所有不同文件。例如,up从 Visual Studio 工具调用的 是:
docker-compose -f "C:\Projects\v4\docker-compose.yml" -f "C:\Projects\v4\docker-compose.override.yml" -f "C:\Projects\v4\docker-compose.vs.debug.yml" -p dockercompose320715364 up -d
这比手动操作更不直观。如果有人知道更好的方法,我会全神贯注!
| 归档时间: |
|
| 查看次数: |
2711 次 |
| 最近记录: |