首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为laravel应用程序设置Docker我在“组合/cli/main.py”中出错

为laravel应用程序设置Docker我在“组合/cli/main.py”中出错
EN

Stack Overflow用户
提问于 2018-10-13 10:24:03
回答 1查看 880关注 0票数 3

在我的Kubuntu 18.04中,我试图为我的Laravel应用程序运行对接程序。

代码语言:javascript
复制
$ docker --version 
Docker version 17.12.1-ce, build 7390fc6

我有3份文件:

.env:

代码语言:javascript
复制
# PATHS
DB_PATH_HOST=./databases
APP_PATH_HOST=./votes
APP_PTH_CONTAINER=/var/www/html/

docker-compose.yml:

代码语言:javascript
复制
version: '3'
services:
    web:
        build: ./web/Dockerfile.yml
        environment:
            - APACHE_RUN_USER=www-data
        volumes:
            - ${DB_PATH_HOST}:${APP_PTH_CONTAINER}
        ports:
            - 8080:80
        working_dir: ${APP_PTH_CONTAINER}

    db:
        image: mysql
        command: --default-authentication-plugin=mysql_native_password
        restart: always
        environment: 
            MYSQL_ROOT_PASSWORD: 1
        volumes:
            - ${DB_PATH_HOST}:/var/lib/mysql

    adminer:
        image: adminer
        restart: always
        ports:
            - 8080:8080

    composer:
        image: composer:1.6
        volumes:
            - ${DB_PATH_HOST}:${APP_PTH_CONTAINER}
        working_dir: ${APP_PTH_CONTAINER}
        command: composer install        

/web/Dockerfile.yml:

代码语言:javascript
复制
FROM php:7.2-apache

RUN docker-php-ext-install \
    pdo_mysql \
    && a2enmod \
    rewrite

当我尝试使用docker-compose up --build时,我得到以下信息:

代码语言:javascript
复制
serge@serge:/mnt/_work_sdb8/wwwroot/lar/DockerApps/votes_docker$ docker-compose up --build
Building web
Traceback (most recent call last):
  File "bin/docker-compose", line 6, in <module>
  File "compose/cli/main.py", line 71, in main
  File "compose/cli/main.py", line 127, in perform_command
  File "compose/cli/main.py", line 1052, in up
  File "compose/cli/main.py", line 1048, in up
  File "compose/project.py", line 466, in up
  File "compose/service.py", line 329, in ensure_image_exists
  File "compose/service.py", line 1047, in build
  File "site-packages/docker/api/build.py", line 142, in build
TypeError: You must specify a directory to build in path
[6769] Failed to execute script docker-compose

我知道*.py是python语言文件,但我不使用python语言,也不使用它,我使用的是python语言。

为什么是错误,以及如何修复它?

改性:

代码语言:javascript
复制
$ docker-compose up --build
Building webapp
Step 1/2 : FROM php:7.2-apache
 ---> a7d68dad7584
Step 2/2 : RUN docker-php-ext-install     pdo_mysql     && a2enmod     rewrite
 ---> Using cache
 ---> 519d1b33af81
Successfully built 519d1b33af81
Successfully tagged votes_docker_webapp:latest
Starting votes_docker_adminer_1 ... 
Starting votes_docker_composer_1 ... 
Starting votes_docker_adminer_1  ... error
votes_docker_db_1 is up-to-date

ERROR: for votes_docker_adminer_1  Cannot start service adminer: driver failed programming external connectivity on endpoint votes_docker_adminer_1 (6e94693ab8b1a990aaa83164df0952e8665f351618a72aStarting votes_docker_composer_1 ... done

ERROR: for adminer  Cannot start service adminer: driver failed programming external connectivity on endpoint votes_docker_adminer_1 (6e94693ab8b1a990aaa83164df0952e8665f351618a72a5531f9c3ccc18a2e3d): Bind for 0.0.0.0:8080 failed: port is already allocated
ERROR: Encountered errors while bringing up the project.

我试着检查了相关的端口,得到了:

代码语言:javascript
复制
# sudo netstat -ntpl | grep 8080:8080
# sudo netstat -ntpl | grep 0.0.0.0:8080
# sudo netstat -ntpl | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      7361/docker-proxy   

修改后的 #2:

代码语言:javascript
复制
serge@serge:/mnt/_work_sdb8/wwwroot/lar/DockerApps/votes_docker$ docker-compose up --build
Creating network "votes_docker_default" with the default driver
Building webapp
Step 1/2 : FROM php:7.2-apache
 ---> a7d68dad7584
Step 2/2 : RUN docker-php-ext-install     pdo_mysql     && a2enmod     rewrite
 ---> Using cache
 ---> 519d1b33af81
Successfully built 519d1b33af81
Successfully tagged votes_docker_webapp:latest
Creating votes_docker_adminer_1  ... done
Creating votes_docker_composer_1 ... done
Creating votes_docker_webapp_1   ... done
Creating votes_docker_db_1       ... done
Attaching to votes_docker_adminer_1, votes_docker_composer_1, votes_docker_webapp_1, votes_docker_db_1
adminer_1   | PHP 7.2.10 Development Server started at Mon Oct 15 10:14:02 2018
composer_1  | Composer could not find a composer.json file in /var/www/html
composer_1  | To initialize a project, please create a composer.json file as described in the https://getcomposer.org/ "Getting Started" section
votes_docker_composer_1 exited with code 1
webapp_1    | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.20.0.4. Set the 'ServerName' directive globally to suppress this message
webapp_1    | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.20.0.4. Set the 'ServerName' directive globally to suppress this message
webapp_1    | [Mon Oct 15 10:14:05.281793 2018] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.25 (Debian) PHP/7.2.10 configured -- resuming normal operations
webapp_1    | [Mon Oct 15 10:14:05.281843 2018] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
db_1        | 2018-10-15T10:14:06.541323Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
db_1        | 2018-10-15T10:14:06.541484Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.11) starting as process 1
db_1        | mbind: Operation not permitted
db_1        | mbind: Operation not permitted
db_1        | mbind: Operation not permitted
db_1        | mbind: Operation not permitted
db_1        | 2018-10-15T10:14:07.062202Z 0 [Warning] [MY-011071] [Server] World-writable config file './auto.cnf' is ignored.
db_1        | 2018-10-15T10:14:07.062581Z 0 [Warning] [MY-010107] [Server] World-writable config file './auto.cnf' has been removed.
db_1        | 2018-10-15T10:14:07.063146Z 0 [Warning] [MY-010075] [Server] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 0cd8212e-d063-11e8-8e69-0242ac140005.
db_1        | 2018-10-15T10:14:07.079020Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
db_1        | 2018-10-15T10:14:07.091951Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
db_1        | 2018-10-15T10:14:07.103829Z 0 [Warning] [MY-010315] [Server] 'user' entry 'mysql.infoschema@localhost' ignored in --skip-name-resolve mode.
db_1        | 2018-10-15T10:14:07.103896Z 0 [Warning] [MY-010315] [Server] 'user' entry 'mysql.session@localhost' ignored in --skip-name-resolve mode.
db_1        | 2018-10-15T10:14:07.103925Z 0 [Warning] [MY-010315] [Server] 'user' entry 'mysql.sys@localhost' ignored in --skip-name-resolve mode.
db_1        | 2018-10-15T10:14:07.103947Z 0 [Warning] [MY-010315] [Server] 'user' entry 'root@localhost' ignored in --skip-name-resolve mode.
db_1        | 2018-10-15T10:14:07.104006Z 0 [Warning] [MY-010323] [Server] 'db' entry 'performance_schema mysql.session@localhost' ignored in --skip-name-resolve mode.
db_1        | 2018-10-15T10:14:07.104034Z 0 [Warning] [MY-010323] [Server] 'db' entry 'sys mysql.sys@localhost' ignored in --skip-name-resolve mode.
db_1        | 2018-10-15T10:14:07.104070Z 0 [Warning] [MY-010311] [Server] 'proxies_priv' entry '@ root@localhost' ignored in --skip-name-resolve mode.
db_1        | 2018-10-15T10:14:07.112700Z 0 [Warning] [MY-010330] [Server] 'tables_priv' entry 'user mysql.session@localhost' ignored in --skip-name-resolve mode.
db_1        | 2018-10-15T10:14:07.112738Z 0 [Warning] [MY-010330] [Server] 'tables_priv' entry 'sys_config mysql.sys@localhost' ignored in --skip-name-resolve mode.
db_1        | 2018-10-15T10:14:07.117764Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.11'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server - GPL.
  1. 是mysql配置错误吗?
  2. 我不是把它作为根运行的。
  3. 此外,在使用LAMP时,是否需要在运行apache命令之前停止docker-composemysql

修改#3:

搜索之后,我在配置文件中添加了mysql版本,并添加了命令选项:

代码语言:javascript
复制
image: mysql:5.7.23
command: --default-authentication-plugin=mysql_native_password  --disable-partition-engine-check

并修正了上述误差。所以:

1.root下的其他控制台中运行命令(但我仍然不确定是否需要它?)

代码语言:javascript
复制
sudo service apache2 stop
sudo service  mysql stop

2.非根控制台下的--我用键在后台运行:

代码语言:javascript
复制
docker-compose up -d 
serge@serge:/mnt/_work_sdb8/wwwroot/lar/DockerApps/votes_docker$ docker-compose down 
Stopping votes_docker_db_1      ... done
Stopping votes_docker_webapp_1  ... done
Stopping votes_docker_adminer_1 ... done
Removing votes_docker_db_1       ... done
Removing votes_docker_webapp_1   ... done
Removing votes_docker_composer_1 ... done
Removing votes_docker_adminer_1  ... done
Removing network votes_docker_default

docker-compose up -d 
Creating network "votes_docker_default" with the default driver
Creating votes_docker_webapp_1   ... done
Creating votes_docker_adminer_1  ... done
Creating votes_docker_db_1       ... done
Creating votes_docker_composer_1 ... done

输出没有错误,但我期望项目中有供应商目录,就像在web/Dockerfile.yml中一样:

代码语言:javascript
复制
FROM php:7.2-apache

RUN docker-php-ext-install \
    pdo_mysql \
    && a2enmod \
    rewrite

但我没看到这个目录..。安装是否成功?

我不知道下一步该搬到哪里去?

代码语言:javascript
复制
serge@serge:/mnt/_work_sdb8/wwwroot/lar/DockerApps/votes_docker$ docker info
Containers: 33
 Running: 2
 Paused: 0
 Stopped: 31
Images: 19
Server Version: 17.12.1-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 9b55aab90508bd389d7654c4baf173a981477d55
runc version: 9f9c96235cc97674e935002fc3d78361b696a69e
init version: v0.13.0 (expected: 949e6facb77383876aeff8a6944dde66b3089574)
Security Options:
 apparmor
 seccomp
  Profile: default
Kernel Version: 4.15.0-36-generic
Operating System: Ubuntu 18.04.1 LTS
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 7.711GiB
Name: serge
ID: BDNU:HFWX:N6YV:IWYW:HJSU:SZ23:URPB:3FR2:7I3E:IFGK:AOLH:YRE5
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:                                                                                                                                                                                            
Experimental: false                                                                                                                                                                                
Insecure Registries:                                                                                                                                                                               
 127.0.0.0/8                                                                                                                                                                                       
Live Restore Enabled: false                                                                                                                                                                        

WARNING: No swap limit support

serge@serge:/mnt/_work_sdb8/wwwroot/lar/DockerApps/votes_docker$ docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
votes_docker_webapp   latest              519d1b33af81        27 hours ago        378MB
adminer               latest              0038b45402de        4 weeks ago         81.7MB
composer              1.6                 e28b5b53ab28        4 weeks ago         154MB
php                   7.2-apache          a7d68dad7584        4 weeks ago         378MB
mysql                 5.7.23              563a026a1511        5 weeks ago         372MB
mysql                 5.7.22              6bb891430fb6        2 months ago        372MB
test2_php             latest              05534d47f926        3 months ago        84.7MB
test1_php             latest              05534d47f926        3 months ago        84.7MB
<none>                <none>              6060fcf4d103        3 months ago        81MB
php                   fpm-alpine          601d5b3a95d4        3 months ago        80.6MB
php                   apache              d9faf33e6e40        3 months ago        377MB
mysql                 latest              8d99edb9fd40        3 months ago        445MB
php                   7-fpm               854ffd8dc9d8        3 months ago        367MB
php                   7.2                 e86d9bb526ef        3 months ago        367MB
ukfx/php              apache-stretch      5958cb7c2316        4 months ago        648MB
nginx                 alpine              bc7fdec94612        4 months ago        18MB
hello-world           latest              e38bc07ac18e        6 months ago        1.85kB
composer/composer     latest              5afb0951f2a4        2 years ago         636MB
serge@serge:/mnt/_work_sdb8/wwwroot/lar/DockerApps/votes_docker$ docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                         PORTS                    NAMES
f8beea5dceca        mysql:5.7.23          "docker-entrypoint.s…"   6 minutes ago       Restarting (2) 6 seconds ago                            votes_docker_db_1
8309b5456dcf        adminer               "entrypoint.sh docke…"   6 minutes ago       Up 6 minutes                   0.0.0.0:8081->8080/tcp   votes_docker_adminer_1
cc644206931b        votes_docker_webapp   "docker-php-entrypoi…"   6 minutes ago       Up 6 minutes                   0.0.0.0:8080->80/tcp     votes_docker_webapp_1

怎么修呢?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-10-14 11:32:01

根据码头工文档,如果在构建上下文中包含Dockerfile,则可以将其指定为包含生成上下文路径的字符串。

您使用的是Dockerfile.yml文件,它不是默认文件(Dockerfile),因此在本例中还应该指定contextdockerfile

代码语言:javascript
复制
web:
    build:
        context: ./web
        dockerfile: Dockerfile.yml

最后一个docker-compose.yaml是:

代码语言:javascript
复制
version: '3'
services:
    web:
        build:
            context: ./web
            dockerfile: Dockerfile.yml
        environment:
            - APACHE_RUN_USER=www-data
        volumes:
            - ${DB_PATH_HOST}:${APP_PTH_CONTAINER}
        ports:
            - 8080:80
        working_dir: ${APP_PTH_CONTAINER}

    db:
        image: mysql
        command: --default-authentication-plugin=mysql_native_password
        restart: always
        environment: 
            MYSQL_ROOT_PASSWORD: 1
        volumes:
            - ${DB_PATH_HOST}:/var/lib/mysql

    adminer:
        image: adminer
        restart: always
        ports:
            - 8080:8080

    composer:
        image: composer:1.6
        volumes:
            - ${DB_PATH_HOST}:${APP_PTH_CONTAINER}
        working_dir: ${APP_PTH_CONTAINER}
        command: composer install

添加到修改后的部件:

webadminer都被配置为在主机系统上的端口8080上分配。所以你才会在这里发生冲突。要解决上述问题,您需要将adminer绑定到另一个端口8081,例如。

最后一个docker-compose.yaml是:

代码语言:javascript
复制
version: '3'
services:
    web:
        build:
            context: ./web
            dockerfile: Dockerfile.yml
        environment:
            - APACHE_RUN_USER=www-data
        volumes:
            - ${DB_PATH_HOST}:${APP_PTH_CONTAINER}
        ports:
            - 8080:80
        working_dir: ${APP_PTH_CONTAINER}

    db:
        image: mysql
        command: --default-authentication-plugin=mysql_native_password
        restart: always
        environment: 
            MYSQL_ROOT_PASSWORD: 1
        volumes:
            - ${DB_PATH_HOST}:/var/lib/mysql

    adminer:
        image: adminer
        restart: always
        ports:
            - 8081:8080

    composer:
        image: composer:1.6
        volumes:
            - ${DB_PATH_HOST}:${APP_PTH_CONTAINER}
        working_dir: ${APP_PTH_CONTAINER}
        command: composer install

添加到MODIFIED3部件:

我看到您的composer停靠容器出现了以下错误:

代码语言:javascript
复制
composer_1  | Composer could not find a composer.json file in /var/www/html
composer_1  | To initialize a project, please create a composer.json file as described in the https://getcomposer.org/ "Getting Started" section

是因为您意外地将${DB_PATH_HOST}而不是${APP_PATH_HOST}放在composer配置中吗?

代码语言:javascript
复制
composer:
    image: composer:1.6
    volumes:
        - ${DB_PATH_HOST}:${APP_PTH_CONTAINER}
    working_dir: ${APP_PTH_CONTAINER}
    command: composer install 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52791928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档