我nignx container和我的asset container所有资产都是用咕噜声或其他工具构建的.
现在在docker compose文件中,我想挂载asset container's文件夹路径,nginx container因此nginx可以提供该文件.
我们怎么做?我不记得,但我认为有一个选项,我们可以分享一个容器与另一个容器的路径.
假设如果我将nginx扩展到2个容器,那么该挂载是否适用于所有nginx实例?
如果我扩大规模asset container那么会发生什么?
我也想和我的主人一起安装它,这样可以很容易地完成开发.
我尝试设置一个nginx-proxy容器,通过端口80上的子域而不是特殊端口访问我的其他容器.你可以猜到,我无法让它发挥作用.
我对Docker本身有点新意,发现编写docker-compose.yml文件对我来说更舒服,所以我不必经常编写长docker run ...命令.我认为你如何启动容器没有区别,无论是用docker还是用docker-compose.然而,我注意到的一个区别是启动容器docker并不会创建任何新的网络,但之后docker-compose会有一个xxx_default网络.
我读到不同网络上的容器无法互相访问,这可能是nginx-proxy没有将请求转发给其他容器的原因.但是,我无法找到一种方法来配置我的docker-compose.yml文件以不创建任何新网络,而是加入默认的桥接网络,如同docker run.
我尝试了下面这个,但是它导致了一个错误,说我无法加入这样的系统网络:
networks:
default:
external:
name: bridge
Run Code Online (Sandbox Code Playgroud)
我也尝试过network_mode: bridge,但这似乎没有任何区别.
如何编写docker-compose.yml文件以不创建新网络,或者根本不可能?
奖金问题:我应该知道docker和之间是否存在其他差异docker-compose?
docker run为了自动化用于启动 docker 容器的配置(参数),我正在编写一个docker-compose.yml文件。
我的容器应该能够访问 GPU,因此我当前使用docker run --gpus=all参数。公开 GPU 以供使用文档中对此进行了描述:
--gpus当您启动容器以访问 GPU 资源时包含该标志。指定要使用的 GPU 数量。例如:$ docker run -it --rm --gpus 所有 ubuntu nvidia-smi
不幸的是,使用 Compose 启用 GPU 访问并没有准确描述此用例。本指南使用deployyaml 元素,但是在使用 GPU 预留机器的情况下。事实上,另一个文档说它将被忽略docker-compose:
这仅在使用 docker stack deploy 部署到 swarm 时生效,并且会被docker-compose up 和 docker-compose run忽略。
启动我们的应用程序的最佳方式是使用我们提供的docker compose.该泊坞窗,撰写启动所有与正确配置的服务.
现在我们想提供一个docker-compose,其中应用程序使用不同的后端运行.在这个组成中,8个10个服务是相同的,2个是不同的.
没有代码重复如何实现这一目标? 我看到服务可以从另一个docker-compose文件扩展服务,但是这仍然需要列出两个文件中的所有10个服务.
请帮助我理解docker compose中'image'和'build'之间的区别
我volumes_from在docker compose中经历了选项.显然,您可以从容器或服务导入卷.从docker撰写的文档中,它是:
volumes_from
从另一个服务或容器挂载所有卷,可选择指定只读访问(ro)或读写(rw).
Run Code Online (Sandbox Code Playgroud)volumes_from: - service_name - service_name:ro - container:container_name - container:container_name:rw注意:仅在版本2文件格式中支持container:...格式.在版本1中,您可以使用容器名称而不将其标记为:
Run Code Online (Sandbox Code Playgroud)- service_name - service_name:ro - container_name - container_name:rw
我很困惑,这里的容器和服务有什么区别?
我有以下docker命令来运行容器
docker run -d --name test -v /etc/hadoop/conf:/etc/hadoop/conf -v /usr/lib/python2.7/dist-packages/hdinsight_common:/usr/lib/python2.7/dist-packages/hdinsight_common -v /etc/hive/conf/:/etc/hive/conf/ -v /etc/tez/conf/:/etc/tez/conf/ -v /usr/hdp/2.4.2.0-258/sqoop/lib/:/usr/hdp/2.4.2.0-258/sqoop/lib/ -i -t hdinsight /bin/bash
Run Code Online (Sandbox Code Playgroud)
这很复杂,所以我试图创建像这样的docker-compose文件
version: '2'
services:
hdinsight:
image: hdinsight
container_name: ABC
volumes:
- /etc/hadoop/conf:/etc/hadoop/conf
- /usr/lib/python2.7/dist-packages/hdinsight_common:/usr/lib/python2.7/dist-packages/hdinsight_common
- /etc/hive/conf/:/etc/hive/conf/
- /etc/tez/conf/:/etc/tez/conf/
- /usr/hdp/2.4.2.0-258/sqoop/lib/:/usr/hdp/2.4.2.0-258/sqoop/lib/
entrypoint:
- bash
labels:
- "HDInsight client VM"
Run Code Online (Sandbox Code Playgroud)
但我不知道该到哪里-d,-i和-t从我原来的码头工人,运行命令flages
我正在运行像这样的码头组合
docker-compose -f docker-compose.yml run hdinsight
Run Code Online (Sandbox Code Playgroud)
任何人都可以指出我正确的方向吗?
第一次回答后更新
我试着跑 docker-compose up -d
root@abc-docker:~/ubuntu# docker-compose up -d
Creating ABC
root@sbd-docker:~/ubuntu# docker ps -a
CONTAINER ID IMAGE …Run Code Online (Sandbox Code Playgroud) 我有入口shell脚本,它接受参数-a -b.
我有工作的docker-compose.yml文件,我用指令覆盖tomcat的入口点:
entrypoint: /usr/local/tomcat/entrypoint.sh -a param1 -b param2
Run Code Online (Sandbox Code Playgroud)
什么是docker run替代品?
docker run --entrypoint "/usr/local/tomcat/entrypoint.sh -a param1 -b param2" tomcat:jre8
Run Code Online (Sandbox Code Playgroud)
不起作用
我明白了:
docker: Error response from daemon:
invalid header field value "oci runtime error: container_linux.go:247:
starting container process caused \"exec:
\\\"/usr/local/tomcat/entrypoint.sh -a param1 -b param2\\\":
stat /usr/local/tomcat/entrypoint.sh -a param1 -b param2:
no such file or directory\"\n".
Run Code Online (Sandbox Code Playgroud)
供参考:
docker run --entrypoint "/usr/local/tomcat/entrypoint.sh" tomcat:jre8
Run Code Online (Sandbox Code Playgroud)
从Docker的角度来看,但显然脚本失败了
使用docker-composev2环境变量可以简单地设置:
enviroment:
- MONGO_PATH=mongodb://db-mongo:27017
Run Code Online (Sandbox Code Playgroud)
完整docker-compose.yml文件是:
version: '2'
services:
web:
build: .
environment:
- MONGO_PATH=mongodb://db-mongo:27017
ports:
- "3000:3000"
volumes:
- .:/app
- /app/node_modules
depends_on:
- db-mongo
- db-redis
db-mongo:
image: mongo
restart: unless-stopped
command: --smallfiles
ports:
- "27017:27017"
volumes:
- ./data:/data/db
[...]
Run Code Online (Sandbox Code Playgroud)
但是,如何转义不是普通字符串的环境变量?
{"database": {"data": {"host": "mongo"}}}
Run Code Online (Sandbox Code Playgroud)
我试过了:
NODE_CONFIG=\{"database": \{"data"\: \{"host": "mongo"\}, "session": \{"host": "redis" \}\}\}
NODE_CONFIG="\{"database": \{"data"\: \{"host": "mongo"\}, "session": \{"host": "redis" \}\}\}"
NODE_CONFIG='{"database": {"data": {"host": "mongo"}, "session": {"host": "redis" }}}'
Run Code Online (Sandbox Code Playgroud)
错误:yaml.parser.ParserError:解析"./docker-compose.yml"中的块映射,第6行,第9列预期,但在"./docker-compose.yml"第6行中找到'}',第92栏
这是我正在使用的图像.
我把它命名了 posgres_test
如果我单独运行图像
docker run -i -t -v="test_volume:/var/lib/postgresql" -p 5432:5432 posgres_test
Run Code Online (Sandbox Code Playgroud)
我可以访问它
psql -h 192.168.99.100 -p 5432 -U pguser -W pgdb
Run Code Online (Sandbox Code Playgroud)
或者我可以使用我的golang应用程序访问它
// host is set to postgres
db, err := sql.Open("postgres", "postgres://pguser:pguser@postgres:5432/pgdb")
// table test_db is manually created.
rows, err := db.Query("SELECT name FROM test_db WHERE)
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用 docker compose
docker-compose.yml
version: "2"
services:
postgres:
image: my_image/postgresql:9.3
volumes:
- test_volume:/var/lib/postgresql
ports:
- "5432:5432"
web:
image: my-golang-app4
ports:
- "8080:8080"
volumes:
test_volume: {}
Run Code Online (Sandbox Code Playgroud)
我得到以下内容
pguser@pgdb ERROR: relation "test_db" …Run Code Online (Sandbox Code Playgroud)