我在使用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) 我正在构建一个 django-react 站点,突然我的 docker-compose 不再构建,尽管需求或图像版本发生了任何更改。
\n我的requirements.txt 如下所示:
\nDjango>=3.2.4,<4.0\ndjangorestframework>=3.12.4,<3.14.0\ndjangorestframework-simplejwt>=4.8.0,<5.3.0\npsycopg2>=2.8.6,<2.9\ndrf-spectacular>=0.15.1,<0.30\ndjango-allauth>0.5,<1.0\ndj-rest-auth>=3.0,<4.0\nRun Code Online (Sandbox Code Playgroud)\n错误输出:
\n => [backend internal] load .dockerignore 0.0s \n => => transferring context: 234B 0.0s \n => [backend internal] load build definition from Dockerfile 0.0s \n => => transferring dockerfile: 933B 0.0s \n => [backend internal] load metadata for docker.io/library/python:3.9-alpine3.13 0.5s \n => [backend 1/6] FROM docker.io/library/python:3.9-alpine3.13@sha256:a7cbd1e7784a35a098cedbc8681b790d35ff6030a5e13f043185e2465003a040 0.0s \n => [backend internal] load build context 0.0s \n => => transferring context: 2.53kB 0.0s \n => CACHED [backend 2/6] WORKDIR …Run Code Online (Sandbox Code Playgroud) 我试图理解D-Compose和D-Swarm之间的差异或相似之处.
通过阅读文档,我了解到docker-compose提供了一种机制,可以将不同的容器绑定在一起并协同工作,作为单个服务(我猜它使用与用于链接两个容器的--link命令相同的功能)
另外,我对docker-swarm的理解是它允许你管理不同docker-hosts的集群,每个docker-hosts都运行一些docker-images的几个容器实例.我们可以将连接定义为群中不同容器之间的覆盖网络(即使它们跨越群中的两个泊坞主机)将它们作为一个单元连接起来.
我想要了解的是docker-swarm成功的docker-compose和覆盖网络是连接容器的新(推荐)方式吗?
或者,docker-compose仍然是整个docker系列中不可或缺的一部分,并且可以使用它来连接容器以协同工作.如果是这样,docker-compose在群中的不同节点上使用容器?
或者是覆盖网络用于连接群集中不同主机的容器,而docker-compose用于创建内部链接?
此外,我还看到在docker文档中提到 -不再推荐链接,很快就会过时.
我有点困惑???
非常感谢!
我想创建一个能够在不同服务器上运行的docker-compose文件.
为此,我必须能够在docker-compose.yml中的几个位置指定服务器的host-ip或主机名(所有容器都在运行).
例如,对于一个consul容器,我想要定义其他领事容器如何找到服务器.
consul:
image: progrium/consul
command: -server -advertise 192.168.1.125 -bootstrap
Run Code Online (Sandbox Code Playgroud)
我不想显然硬编码192.168.1.125.
我可以使用 env_file:来指定主机名或ip并在每个服务器上采用它,所以我将这些信息放在一个地方并在docker-compose.yml中使用它.但是这只能用于指定环境变量而不能用于广告参数.
有更好的解决方案吗?
我有一个Dockerfile地方,我将现有目录(含内容)复制到容器,工作正常:
Dockerfile
FROM php:7.0-apache
COPY Frontend/ /var/www/html/aw3somevideo/
COPY Frontend/ /var/www/html/
RUN ls -al /var/www/html
RUN chown -R www-data:www-data /var/www/html
RUN chmod -R 755 /var/www/html
Run Code Online (Sandbox Code Playgroud)
但是,当我使用docker-compose.yml文件时,只有目录aw3somevideo,里面aw3somevideo没有任何内容.
docker-compose.yml:
php:
build: php/
volumes:
- ./Frontend/ :/var/www/html/
- ./Frontend/index.php :/var/www/html/
ports:
- 8100:80
Run Code Online (Sandbox Code Playgroud)
也许我不明白它的功能,volumes如果是这种情况,请告诉我如何通过docker-compose.yml文件将现有文件复制到容器中.
我有一个YAML标量,当我尝试评估我的docker-compose.yml文件时抛出以下错误:
错误:服务"time_service"中"环境"选项的插值格式无效:"$ {Time.now}"
YAML:
---
version: '2'
services:
time_service:
build: "."
environment:
TIME: "${Time.now}"
Run Code Online (Sandbox Code Playgroud)
如何保持与写入相同的字符串输出,但避免让docker-compose将其解释为错误的字符串插值?
我刚刚在 MacOS 上从 2.3 版升级到 Docker Desktop 2.4。突然间,我的 mysql 容器都不会启动。日志显示这是原因:
Different lower_case_table_names settings for server ('2') and data dictionary ('0').
Data Dictionary initialization failed.
Aborting
Run Code Online (Sandbox Code Playgroud)
数据库文件安装在我主机上的一个卷中,以便它们在重新启动之间保持不变。
我终于知道为什么了。发帖是为了回答。
下面的示例创建dbdata命名卷并在db服务中引用它:
version: '2'
services:
db:
image: mysql
volumes:
- dbdata:/var/lib/mysql
volumes:
dbdata:
driver: local
Run Code Online (Sandbox Code Playgroud)
我可以看到卷的路径默认为:
/ var/lib/docker/volumes/project_name _dbdata
我的问题是如何在主机上为dbdata卷配置路径.
我试图确保我的应用程序容器在db容器启动和READY TO接受连接之前不运行迁移/启动.
所以我决定使用healthcheck并依赖于docker compose file v2中的选项.
在应用程序中,我有以下内容
app:
...
depends_on:
db:
condition: service_healthy
Run Code Online (Sandbox Code Playgroud)
另一方面,db具有以下健康检查
db:
...
healthcheck:
test: TEST_GOES_HERE
timeout: 20s
retries: 10
Run Code Online (Sandbox Code Playgroud)
我尝试了几种方法,如:
test: ["CMD", "test -f var/lib/mysql/db"]
test: ["CMD", "echo 'SELECT version();'| mysql"]
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
有人有解决方案吗?
我正在尝试分发一组在几个链接容器中运行的连接应用程序,其中包含一个mongo数据库,该数据库需要:
理想情况下,数据也将保存在链接的数据卷容器中.
我可以mongo使用mongo不安装任何卷的基本实例将数据导入容器(dockerhub image:psychemedia/mongo_nomount- 这实际上是没有VOLUME /data/db语句的基本mongo Dockerfile )和Dockerfile以下行的配置:
ADD . /files
WORKDIR /files
RUN mkdir -p /data/db && mongod --fork --logpath=/tmp/mongodb.log && sleep 20 && \
mongoimport --db testdb --collection testcoll --type csv --headerline --file ./testdata.csv #&& mongod --shutdown
Run Code Online (Sandbox Code Playgroud)
where ./testdata.csv在与./mongo-with-dataDockerfile 相同的目录()中.
我的docker-compose配置文件包括以下内容:
mongo:
#image: mongo
build: ./mongo-with-data
ports:
- "27017:27017"
#Ideally we should be able to mount this against a host directory
#volumes:
# …Run Code Online (Sandbox Code Playgroud) docker-compose ×10
docker ×9
mysql ×2
copy ×1
cython ×1
docker-swarm ×1
dockerfile ×1
escaping ×1
macos ×1
mongodb ×1
pycharm ×1
python ×1
pyyaml ×1
volume ×1
volumes ×1