我希望有人能帮助我理解我在使用WSL2使用Docker Desktop for Windows构建多容器环境时遇到的错误(不要认为这些细节很重要,但你永远不知道)
我有一个< code>docker-compose.yml脚本,它构建了许多链接在一起的容器。通过注释和取消注释特定的容器,我可以很轻松地让它工作,但这似乎与我理解的< code>docker compose的工作方式背道而驰。
在任何人对使用<code>docker Composite wait
这是我的 docker-compose.yml
文件:
version: "3.4"
services:
# Redis Service
redis:
build:
context: .
dockerfile: docker/redis/Dockerfile
image: star/redis
container_name: star_redis
restart: unless-stopped
tty: true
ports:
- "16379:6379"
volumes:
- redis_data:/data
db:
build:
context: .
dockerfile: docker/mysql/Dockerfile
image: star/mysql
container_name: star_db
restart: unless-stopped
tty: true
environment:
RUN_INIT_FILES: ${DOCKER_RUN_MYSQL_INIT}
SERVICE_TAGS: dev
SERVICE_NAME: MySQL
ports:
- "3306:3306"
volumes:
- ${WEB_APP_PATH}${WEB_APP_PROJECT_PATH}/docker/mysql/init:/docker-entrypoint- initdb.d
- star_mysql_db:/var/lib/mysql
app:
build:
context: .
dockerfile: docker/php/Dockerfile
image: star/php
container_name: star_app
restart: unless-stopped
tty: true
environment:
RUNNING_IN_DOCKER: 'true'
SERVICE_NAME: app
SERVICE_TAGS: dev
volumes:
- star_laravel_data:${WEB_DESTINATION_PATH}
depends_on:
- redis
- db
nginx:
build:
context: .
dockerfile: docker/nginx/Dockerfile
image: star/nginx
container_name: star_webserver
restart: unless-stopped
tty: true
environment:
RUNNING_IN_DOCKER: 'true'
ports:
- '80:80'
- '443:443'
- '8888:80'
volumes:
- star_laravel_data:${WEB_DESTINATION_PATH}
depends_on:
- db
- app
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: star_phpmyadmin
environment:
PMA_PORT: 3306
PMA_HOST: db
PMA_USER: ####
PMA_PASSWORD: ######
links:
- db:MySQL
ports:
- "8090:80"
restart: unless-stopped
depends_on:
- db
- app
- nginx
package-installer:
image: star/php:latest
container_name: star_installer
restart: on-failure
depends_on:
- db
- app
- nginx
volumes:
- star_laravel_data:${WEB_DESTINATION_PATH}
environment:
APP_ENV: local
CONTAINER_ROLE: installer
CACHE_DRIVER: redis
SESSION_DRIVER: redis
QUEUE_DRIVER: redis
REDIS_HOST: redis
# Scheduler Service
scheduler:
image: star/php:latest
container_name: star_scheduler
restart: on-failure
depends_on:
- db
- app
- nginx
- package-installer
volumes:
- star_laravel_data:${WEB_DESTINATION_PATH}
environment:
APP_ENV: local
CONTAINER_ROLE: scheduler
CACHE_DRIVER: redis
SESSION_DRIVER: redis
QUEUE_DRIVER: redis
REDIS_HOST: redis
# Queue Service
queue:
image: star/php:latest
container_name: star_queue
restart: on-failure
logging:
driver: local
depends_on:
- db
- app
- nginx
- package-installer
volumes:
- star_laravel_data:${WEB_DESTINATION_PATH}
environment:
APP_ENV: local
CONTAINER_ROLE: queue
CACHE_DRIVER: redis
SESSION_DRIVER: redis
QUEUE_DRIVER: redis
REDIS_HOST: redis
volumes:
star_laravel_data:
driver: local
driver_opts:
type: none
o: bind
device: ${WEB_APP_PATH}${WEB_APP_PROJECT_PATH}
star_mysql_db:
portainer_data:
redis_data:
driver: local
所以这是问题的关键,如果我运行它,作为一个新安装,我从docker compose
得到这个响应:
[+] Running 0/3
- package-installer Error
- scheduler Error
- queue Error
Error response from daemon: pull access denied for star/php, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
这些容器都有一个<code>depends_on</code>字段,告诉它们至少需要首先启动其他容器,这些容器是<code>docker compose</code>尝试构建的第一个容器。对我来说,这毫无意义。它们有一个依赖_on
。出于某种原因,它们使用应用程序
容器创建的自定义图像来构建自己的容器。那么,如果被告知它们依赖于其他容器,并且它们位于脚本的底部,为什么它们是docker compose
尝试构建的第一个容器呢?
到目前为止,我唯一可行的解决方案是:
docker compose中的包安装程序
、调度器
和队列
容器。yml
文件软件包安装程序
容器的注释调度程序
和队列
容器的注释软件包安装程序添加的文件)
Dockerfile)如果这只是我自己的环境,这就不是问题了,但是这个docker堆栈是为我们的开发团队设计的,以便能够使用它。有了这个安装它的策略,我必须向每个人解释如何注释和取消注释各种包以使其工作的过程。那将是一场噩梦。
根据docker文档,depends_on
字段应按容器的依赖性顺序构建容器,这意味着容器应按以下顺序构建:
同样,我并不关心它所依赖的容器是否正在运行,它只需要构建,但它似乎没有这样做,似乎(至少对于三个受影响的容器)直接跳到运行阶段,而不构建依赖项)。
任何有用的见解或提示都将受到欢迎。
depends_on不会等待其他容器“就绪”后再启动,只会在它们启动后才启动。如果你需要等待服务准备就绪,请联系https://docs.docker.com/compose/startup-order/来解决这个问题。
问题内容: 我在多模块项目中使用依赖项时遇到麻烦。例如,当我声明模块依赖于这样的模块时(完整代码在此处): 如果我使用Maven 2 运行,则会出现以下错误: 如果我使用Maven 3,则会收到错误消息: 在后一种情况下,我特别困惑,因为我认为它应该在寻找type 而不是type 的工件。 使用maven 2或maven 3,可以通过运行进行编译。使用maven 3,我还可以通过运行进行编译。 但
我正在使用android Studio学习应用程序开发。 在build.gradle页面上,我遇到了一个错误,即 “编译'com.android.support:appcompat-v7:25.2.0'”
嗨, 我是Spring boot gradle项目的新手。我正在尝试用Spring boot应用程序运行flyway迁移。这就是我在gradle中设置依赖项的方式, 首先,我将依赖项添加为。这足以暴露一个终点。 然后我尝试以的方式添加flyway依赖项,它既没有抛出错误,也没有运行迁移脚本,直到我添加了依赖项。在查看了data-jpa jar的pom.xml之后,我确定了这个jar的hiberna
我想知道下面是否可行以及如何实现。 我正在学习Spring boot的教程,其中提到我们可以有一个父依赖项。 然后定义没有版本号的依赖项。 这将在项目依赖项中添加依赖项版本1.5.6。释放sping-boot-starter和sping-boot-starter-web。 就像那样,我想找到什么是<代码> Spring-上下文 spring-jdbc Spring测试 谢谢!
我对Python完全陌生,并尝试运行名为asammdf的库的示例代码“使用MDF工作”(代码可以在这里找到:https://asammdf.readthedocs.io/en/master/examples.html) 当我运行. py脚本时,我得到以下错误消息: 警告:根目录:信号打印需要pyqtgraph或matplotlib回溯(最后一次调用):文件“/Users/martin/Pychar
我已经下载了SBT 0.3.15,我正在尝试运行它:现在,我只想运行SBT并获得提示;我还没有处于我想构建项目的阶段(尽管我希望能够很快完成)。 然而,我面临着SBT试图下载的奇怪依赖项的问题。我最初面临代理的问题,但现在好多了。SBT尝试下载的第一件事是pom。jansi项目1.11的xml及其工作原理: 它尝试下载的下一个文件是fusesource-pom-1.8。Maven central