Docker-compose允许您使用preëxisting泊坞窗图像或从源构建.对于构建选项,官方参考需要
包含Dockerfile的目录的路径,或者是git存储库的url.
我想利用后一种情况,这样我就不必在项目中创建一个git子模块,或者在Docker Hub上注册一个新的存储库.不幸的是,没有关于如何格式化url的示例,我尝试的每个表单都被误认为是相对文件路径.
例如
---
letsencrypt:
build: https://github.com/letsencrypt/letsencrypt.git
...
Run Code Online (Sandbox Code Playgroud)
失败并出现错误:
错误:构建路径/{MY_CURRENT_PATH}/https:/github.com/letsencrypt/letsencrypt.git要么不存在,要么无法访问.
我尝试过的其他表格没有任何运气了:
此实验尝试使用此Docker文件构建容器:
FROM lambdalinux/baseimage-amzn:2016.09-000
COPY ./bundle /opt/bundle/
VOLUME /bundle
Run Code Online (Sandbox Code Playgroud)
然后在容器内创建一个/opt/bundle/file.txt并在其中放入一些文本.但是这个文件没有显示在主机上的bundle目录中,正如我在阅读后所预期的那样我是否应该将我的代码包含在COPY/ADD或最后一段的卷中:
在某些情况下,您可能希望同时使用这两种方法.您可以使用COPY使映像包含代码,并使用Compose文件中的卷在开发期间包含来自主机的代码.卷会覆盖图像的目录内容.
Dockerfile VOLUME不和docker-compose.ymlVOLUME一样吗?如果是这样,在这种情况下如何做到这一点,以便主机目录中的更改反映在容器目录中?
我还在主机上创建了一个文件bundle/play.txt但是没有显示在容器内/opt/bundle/...
我有以下命令来强制重新创建所有容器:
docker-compose up --force-recreate --build
Run Code Online (Sandbox Code Playgroud)
但是,我仍然看到以下几行*:
Step 6/10 : RUN cp environment-prod-docker.js environment.js
---> Using cache
---> e9a2354577ef
Step 7/10 : RUN cat environment.js
---> Using cache
---> ccbc732030ea
Step 8/10 : RUN npm ci --only=production
---> Using cache
---> 6baeabd30cf7
Run Code Online (Sandbox Code Playgroud)
我怎样才能禁用该缓存?(例如,它不会重建我的应用程序。)
我已经发现,在给定容器上使用此特定命令可以重新构建它:
docker-compose build --no-cache
Run Code Online (Sandbox Code Playgroud)
但由于特定原因,我需要使用单行 build'n'start 命令,那么有没有什么方法可以用 来生成它docker-compose up?
我正在使用 docker-compose.yml 版本“3.4”。
*:Dockerfile是这样的:
...
RUN cp environment-prod-docker.js environment.js
RUN cat environment.js
RUN npm ci --only=production
...
Run Code Online (Sandbox Code Playgroud) 我无法使用 ansible 和 docker-compose 启动 keycloak 容器。我收到错误:用户名“admin”的用户已添加到“/opt/jboss/keycloak/standalone/configuration/keycloak-add-user.json”
我有 3 个可靠的工作:
创建网络:
- name: Create a internal network
docker_network:
name: internal
Run Code Online (Sandbox Code Playgroud)
设置 postgres:
- name: "Install Postgres"
docker_compose:
project_name: posgressdb
restarted: true
pull: yes
definition:
version: '2'
services:
postgres:
image: postgres:12.1
container_name: postgres
restart: always
env_file:
- /etc/app/db.env
networks:
- internal
volumes:
- postgres-data:/var/lib/postgresql/data
- /etc/app/createdb.sh:/docker-entrypoint-initdb.d/init-app-db.sh
ports:
- "5432:5432"
volumes:
postgres-data:
networks:
internal:
external:
name: internal
Run Code Online (Sandbox Code Playgroud)
创建密钥斗篷容器:
- name: Install keycloak
docker_compose:
project_name: appauth
restarted: true
pull: yes
definition:
version: '2' …Run Code Online (Sandbox Code Playgroud) 有没有办法可以使用名称而不是IP地址访问我的docker容器?
我听说过管道工程,我已经看到了docker的一些dns和主机名类型选项,但我仍然无法将所有内容拼凑在一起.
感谢您的时间.
我不确定这是否有用,但这是我到目前为止所做的:
我已经将DNS别名条目添加到我的专用网络DNS服务器,它与docker-machine使用的机器名称相匹配.但是,当计算机启动并连接到网络时,它始终会选择不同的IP地址.
我只是迷失在哪里解决这个问题:
我可能正在寻找类似这个问题的东西:
如何让docker使用我的网络路由器轻松地将dhcp ip分配给容器而不是管道?
任何大方向都会很棒......再次感谢!
我想在运行后立即运行脚本
`docker-compose up -d`
Run Code Online (Sandbox Code Playgroud)
这是我的片段docker-compose.yml.其他设置是mysql服务器,redis ...等....但它们不会导致任何问题
web:
image: nginx
container_name: web-project
volumes:
- ./code:/srv
working_dir: /srv/myweb
extra_hosts:
- "myweb.local:127.0.0.1"
ports:
- 8081:80
# tty: true
command: sh /srv/scripts/post-run-web.sh
Run Code Online (Sandbox Code Playgroud)
所以每当我跑步 docker-compose up -d或者 docker-compose up一切都停止.(容器不能继续运行).虽然我的shell脚本很简单(运行echos ...或phpunit).这是我的剧本.
#!/bin/bash
echo running post install scripts for web..;
cd /srv/myweb
npm install
composer self-update
composer update
Run Code Online (Sandbox Code Playgroud)
这就是我得到的错误.就像服务器(nginx)还没有运行一样.此外,如果我使用exec bash连接到服务器,并检查进程.我没有看到nginx正在运行(还).
web_1 | You are already using composer version 7a9eb02190d334513e99a479510f87eed18cf958.
web_1 | Loading composer repositories with package information
web_1 | Updating dependencies (including require-dev) …Run Code Online (Sandbox Code Playgroud) 我正在寻找构建代表已存在的公司数据库的dockerfiles.同样,我想创建一个通过恢复psql转储开始的docker文件.
我有我psql_dump.sql的.目录.
FROM postgres
ADD . /init_data
run "createdb" "--template=template0" "my_database"
run "psql" "-d" "my_database" --command="create role my_admin superuser"
run "psql" "my_database" "<" "init_data/psql_dump.sql"
Run Code Online (Sandbox Code Playgroud)
我认为这样做会很好.我想避免使用.sh脚本的解决方案.像这个解决方案.
我使用template0,因为psql文档说您需要创建原始数据库中的相同用户,并且需要在还原之前使用template0创建数据库.
但是,它给了我一个错误:
createdb: could not connect to database template1: could not connect to server: No such file or directory
Is the server running locally and accepting
Run Code Online (Sandbox Code Playgroud)
我也在使用docker compose作为整个应用程序,如果在docker-compose中解决这个问题更好,我会很乐意使用基本的psql镜像并使用docker compose来做到这一点.
我正在尝试使用sudo运行docker-compose.
我在Ubuntu 16.01上安装了docker和docker-compose.
由于尝试使用curl下载compose时出错,我最终使用pip安装它.
Docker版本1.12.0,构建8eab29e docker-compose版本1.8.0,build 94f7016
然而,当我尝试使用sudo运行docker-compose时,我得到以下内容(使用带有docker的sudo很好)
sudo: docker-compose: command not found
Run Code Online (Sandbox Code Playgroud)
我想对"安装"的含义有不同的定义.我一直在声称没有安装的同一台计算机上使用docker-compose.
$ dpkg -s docker-compose
dpkg-query: package 'docker-compose' is not installed and no information is available
Use dpkg --info (= dpkg-deb --info) to examine archive files,
and dpkg --contents (= dpkg-deb --contents) to list their contents.
$ whereis docker-compose
docker-compose: /home/user/.local/bin/docker-compose
$ pip show --files docker-compose
---
Metadata-Version: 2.0
Name: docker-compose
Version: 1.8.0
Summary: Multi-container orchestration for Docker
Home-page: https://www.docker.com/
Author: Docker, Inc.
Author-email: UNKNOWN
Installer: pip …Run Code Online (Sandbox Code Playgroud) 我有在node_modulesDocker容器内安装并与主机同步的问题.我的Docker的版本是18.03.1-ce, build 9ee9f40和Docker Compose的版本一样1.21.2, build a133471.
我docker-compose.yml看起来像:
# Frontend Container.
frontend:
build: ./app/frontend
volumes:
- ./app/frontend:/usr/src/app
- frontend-node-modules:/usr/src/app/node_modules
ports:
- 3000:3000
environment:
NODE_ENV: ${ENV}
command: npm start
# Define all the external volumes.
volumes:
frontend-node-modules: ~
Run Code Online (Sandbox Code Playgroud)
我的Dockerfile:
# Set the base image.
FROM node:10
# Create and define the working directory.
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
# Install the application's dependencies.
COPY package.json ./
COPY package-lock.json ./
RUN npm install …Run Code Online (Sandbox Code Playgroud) 我有一个 docker-compose 文件和一个 Dockerfile。MySQL 已正确安装。我已经设置了MYSQL_ROOT_PASSWORD。但是当尝试访问 mysql db 时,出现错误 - 访问被拒绝。我已阅读本网站的其他主题,但无法获得太多帮助。:(
这是我的 docker-compose 文件:
version: '3'
volumes:
db_data: {}
services:
db:
build:
context: .
dockerfile: ./db/Dockerfile
args:
- database=iTel
- password=123
image: db_image
volumes:
- db_data:/var/lib/mysql
ports:
- "3306:3306"
Run Code Online (Sandbox Code Playgroud)
和 Dockerfile:
FROM mysql:5.7.15
ARG database
ARG password
RUN echo ${database}
RUN echo ${password}
MAINTAINER me
ENV MYSQL_DATABASE=${database} \
MYSQL_ROOT_PASSWORD=${password}
ADD ./db/database100.sql /docker-entrypoint-initdb.d
EXPOSE 3306
Run Code Online (Sandbox Code Playgroud)
以下是构建日志:
docker-compose up -d
Building db
Step 1/9 : FROM mysql:5.7.15
5.7.15: Pulling from library/mysql …Run Code Online (Sandbox Code Playgroud) docker ×10
docker-compose ×10
dockerfile ×2
bash ×1
dns ×1
git ×1
hostname ×1
jboss ×1
keycloak ×1
linux ×1
mysql ×1
nginx ×1
node-modules ×1
npm ×1
postgresql ×1
ubuntu ×1